Qt 5.11-将外部应用程序嵌入QWidget

时间:2018-10-02 12:34:36

标签: c++ qt qt5

我正在尝试使在QWidget(ui-> appWidget)中显示的qt MainWindow应用程序成为外部窗口(我从QProcess运行的其他应用程序)。

现在,当我这样做时,新的小部件将获得ui-> appWidget大小, 但是它没有进入,它仍然将外部应用程序显示为外部窗口。

我需要做些什么才能使其嵌入到ui-> 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 :(得分:1)

可能是您将布局设置为错误的小部件。

看看这段代码,它在QMainWindow内移动一个现有窗口(海豚文件管理器-我通过xwininfo命令检索到了窗口ID)

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