Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

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;
    }


  • Qt Champions 2019

    @MarkusWiLinux said in Embedded Programm LineEdit nicht möglich:

    dass der Cursor kurz
    im LineEdit aufblinkt und danach wieder verschwindet

    Und wenn do das Line Edit anklickst? Funktioniert es dann?



  • Leider nicht. Wie schon gesagt, alles bis auf die LineEdits funktionieren.


Log in to reply