Qt 5.11 - встроить внешнее приложение в QWidget - PullRequest
0 голосов
/ 02 октября 2018

Я пытаюсь сделать приложение MainWindow qt, которое показывает в QWidget (ui-> appWidget) внешнее окно (другое приложение, которое я запускаю из QProcess).

Теперь, когда я это делаю,новый виджет получает размер ui-> appWidget, но не попадает в него, он по-прежнему показывает внешнее приложение как внешнее окно.

Что мне нужно сделать, чтобы встроить его в пользовательский интерфейс-> appWidget?

это мой код:

void MainWindow::runScript(QString command){

    //Set Procees to Scripts directory
    process.setWorkingDirectory(directory.currentPath() + "/Scripts");

    //Open command process
    process.start("./" + command + ".sh" );

    //Check if Script succeed to open
    if(process.waitForStarted() == false){
        qDebug() << "Error starting " << command << " Script";
        qDebug() << "ERROR: " << process.errorString();
   }else{
        qDebug() << "Script succeed to open";
    }


    QThread::msleep(5000); // make sure process is up.

    QWindow * window =  QWindow::fromWinId(0x3200005); // 0x3200005 - Hardcoded window id .
    QWidget * widget = createWindowContainer(window);
    QVBoxLayout * vl = new QVBoxLayout(ui->appWidget);
    vl->addWidget(widget);
    ui->appWidget->setLayout(vl);
    widget->show();

}

Если вам нужна дополнительная информация, пожалуйста, сообщите мне.

Спасибо за помощь!

1 Ответ

0 голосов
/ 03 октября 2018

Возможно, вы устанавливаете макет на неправильный виджет.

Взгляните на этот фрагмент кода, он перемещает существующее окно (файловый менеджер dolphin - я получил идентификатор окна с помощью команды xwininfo) внутриQMainWindow:

int main( int argc, char** argv )
{
    int l_result = -1;

    QApplication app(argc,argv);

    QMainWindow* l_main_win = new QMainWindow();
    l_main_win->setWindowTitle("DOLPHIN EMBEDDED IN QT APPLICATION!");

    QWindow *l_container = QWindow::fromWinId(0x4400005);
    QWidget *l_widget = QWidget::createWindowContainer(l_container);

    l_main_win->setCentralWidget(l_widget);
    l_main_win->show();

    l_result = app.exec();

    return l_result;
}

, и оно перемещает мое окно дельфина в главное окно Qt с именем «ДЕЛЬФИН ВСТРОЕННЫЙ В ПРИЛОЖЕНИЕ QT!»:

enter image description here

...