程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了QT 5.5将外部应用程序嵌入QWidget大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决QT 5.5将外部应用程序嵌入QWidget?

开发过程中遇到QT 5.5将外部应用程序嵌入QWidget的问题如何解决?下面主要结合日常开发的经验,给出你关于QT 5.5将外部应用程序嵌入QWidget的解决方法建议,希望对你解决QT 5.5将外部应用程序嵌入QWidget有所启发或帮助;

以下达到了预期的结果,关键是添加了FramelessWindowHint:

QWindow *window = QWindow::fromWinID(211812356);
window->setFlags(Qt::FramelessWindowHint);

QWidget *Widget = QWidget::createWindowContainer(window);

QVBoxLayout *layout = new QVBoxLayout(this);
layout->addWidget(Widget);
this->setLayout(layout);

解决方法

我对将外部应用程序嵌入基于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,并仅对值进行硬编码以进行测试。要嵌入的应用程序正在运行。

当我执行我的应用程序时,它运行没有错误。并且要嵌入的应用程序会更改屏幕位置并调整其大小,但是不会嵌入到我的应用程序中。它仍然是一个单独的窗口。如果我杀死了我的应用程序,嵌入式应用程序也会被杀死。

那么有没有一种方法可以将应用程序实际嵌入到我的应用程序中呢?

**更新***

我刚刚发现了一些有趣的东西。当我运行我的应用程序(容器应用程序)时,第二个应用程序(我要嵌入的应用程序)在我的应用程序之外仍然是一个独立的Window。但是,如果我调整应用程序窗口的大小(单击右下角以调整窗口的大小),第二个要嵌入的应用程序也将调整大小,但是在我的容器应用程序之外仍然是一个独立的Window。

更加有趣的是,如果我杀死了我的应用程序,则两个应用程序都将从桌面“消失”。但是,系统监视器显示第二个应用程序(我要嵌入的应用程序)仍在运行(但是没有GUI)。现在,如果我再次启动我的应用程序,第二个应用程序实际上就是我想要的方式嵌入到我的容器应用程序中!

因此,我想我必须弄清楚为什么杀死我的应用程序然后重新启动它会正确地嵌入第二个应用程序。

大佬总结

以上是大佬教程为你收集整理的QT 5.5将外部应用程序嵌入QWidget全部内容,希望文章能够帮你解决QT 5.5将外部应用程序嵌入QWidget所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。