【问题标题】:Qt 5.11 - Embed external application into QWidgetQt 5.11 - 将外部应用程序嵌入 QWidget
【发布时间】:2018-10-02 12:34:35
【问题描述】:

我正在尝试制作一个在 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();

}

如果需要更多详细信息,请告诉我。

感谢您的帮助!

【问题讨论】:

标签: c++ qt qt5


【解决方案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;
}

它会将我的 dolphin 窗口移动到名为“DOLPHIN EMBEDDED IN QT APPLICATION!”的 Qt 主窗口中:

【讨论】:

    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 2013-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多