Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. German
  4. Embedded Programm LineEdit nicht möglich
Forum Updated to NodeBB v4.3 + New Features

Embedded Programm LineEdit nicht möglich

Scheduled Pinned Locked Moved Unsolved German
3 Posts 2 Posters 434 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • MarkusWiLinuxM Offline
    MarkusWiLinuxM Offline
    MarkusWiLinux
    wrote on last edited by MarkusWiLinux
    #1

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

    jsulmJ 1 Reply Last reply
    0
    • MarkusWiLinuxM MarkusWiLinux

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

      jsulmJ Offline
      jsulmJ Offline
      jsulm
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @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?

      https://forum.qt.io/topic/113070/qt-code-of-conduct

      1 Reply Last reply
      0
      • MarkusWiLinuxM Offline
        MarkusWiLinuxM Offline
        MarkusWiLinux
        wrote on last edited by
        #3

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

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved