我希望在我的QT 5.5基于Widget的应用程序中嵌入一个外部应用程序。我只关心它在Linux上的工作。我正在使用带有GNOME的CentOS 7。
这是我尝试过的代码:
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
QWindow *window = QWindow::fromWinId(125829124);
QWidget *widget = QWidget::createWindowContainer(window);
widget->setParent(this);
QVBoxLayout *layout = new QVBoxLayout();
layout->addWidget(widget);
this->setLayout(layout);
}
在这个例子中,我单独获取WinId并将值硬编码进行测试。要嵌入的应用程序正在运行。
当我执行我的应用程序时,它没有错误。虽然要嵌入的应用程序更改了屏幕位置并调整大小,但它并没有嵌入到我的应用程序中。它仍然是一个独立的窗口。如果我关闭我的应用程序,则嵌入的应用程序也会被关闭。
那么有没有办法将应用程序实际嵌入到我的应用程序中呢?
*************** 更新 ****************
我刚刚发现一些有趣的事情。当我运行我的应用程序(容器应用程序)时,第二个应用程序(我想要嵌入的应用程序)仍然是一个独立的窗口,位于我的应用程序之外。但是,如果我调整我的应用程序窗口的大小(单击右下角以调整窗口大小),第二个应用程序(要嵌入的应用程序)也会调整大小,但仍然是一个独立的窗口,位于我的容器应用程序之外。
更有趣的是,如果我关闭我的应用程序,两个应用程序都会从桌面上“消失”。但是,系统监视器显示第二个应用程序(我想嵌入的应用程序)仍在运行(但没有GUI)。现在,如果我再次启动我的应用程序,则第二个应用程序实际上已嵌入到我的容器应用程序中,就像我想要的那样!
所以我想知道为什么关闭我的应用程序然后重新启动它会正确地嵌入第二个应用程序。