Embedded Programm LineEdit nicht möglich
-
Hallo,
ich hab folgenden Problem. Ich rufe aus einem Menüprogramm Programme auf.
Einige sind mit Qt4 erstellt, andere mit Qt5.Ruft das Qt5-Programm ParentApp das mit Qt5 erstellte TestWinID auf ist alles OK.
Ruft das Qt5-Programm ParentApp das mit Qt4 erstellte TestWinID auf passiert folgendes:Das Programm wird problemlos auf dem Widget von ParentApp dargestellt. Alle Buttons funktionieren auch. Nur LineEdits funktionieren nicht. Beim Start sieht man, dass der Cursor kurz
im LineEdit aufblinkt und danach wieder verschwindet. Hat jemand eine Idee?TestWinID.cpp
Qt4/5 - Programm liefert die Window-ID an den Aufrufer über stderr zurück.
Testprogramm das aufgerufen wird. Jeweils mit Qt5 oder Qt4 compiliert.MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
fprintf( stderr, "|WINID: %d|\n", this->winId() );
fprintf( stdout, "Start TestWinID\n" );
fflush( stderr );
fflush( stdout );
}Hier das aufrufende Programm mit Qt5 erstellt.
ParentApp.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);//QString prog( "/home/QtProjekts/build-TestWin-Desktop_Qt_5_14_1_GCC_64bit-Debug/TestWinID" ); // Works
QString prog( "/home/QtProjekts/build-TestWinID-Desktop_Qt_4_8_7_GCC_64bit-Debug/TestWinID" ); // works not
mProg = new QProcess( this );
connect( mProg, SIGNAL( readyReadStandardError() ), this, SLOT( embedProgram() ) );
mProg->setProgram( prog );
mProg->start();
}void MainWindow::embedProgram( void )
{
static bool activ = false;if ( activ )
return;int id = 0;
QString stdOut = mProg->readAllStandardOutput();
QString errOut = mProg->readAllStandardError();if ( ! errOut.contains( "WINID" ) )
return;QStringList sl = errOut.split( "|" );
for( int i = 0 ; i < sl.count() ; i++ ) {
qDebug() << "COUNT: " << sl.count() << "SL: " << sl[i];
fflush( stdout );
if ( sl[i].startsWith( "WINID" ) ) {
qDebug() << "TREFFER: " << sl[i];
fflush( stdout );
id = sl[i].section( ':', 1, 1 ).toInt();
break;
}
}
fflush (stdout);qDebug() << "WINID: " << id;
fflush( stdout );
qDebug() << "STD: " << stdOut;
fflush( stdout );
qDebug() << "ERR: " << errOut;
fflush( stdout );QWindow *window = QWindow::fromWinId(id); // id is the window ID of the child process
Q_ASSERT(window);
window->requestActivate();QWidget *testWidget = QWidget::createWindowContainer(window);
testWidget->activateWindow();QVBoxLayout *testLayout = new QVBoxLayout();
ui->wEmbed->setLayout( testLayout );
testLayout->addWidget( testWidget );activ = true;
return;
} -
@MarkusWiLinux said in Embedded Programm LineEdit nicht möglich:
dass der Cursor kurz
im LineEdit aufblinkt und danach wieder verschwindetUnd wenn do das Line Edit anklickst? Funktioniert es dann?
-
Leider nicht. Wie schon gesagt, alles bis auf die LineEdits funktionieren.