在Qt中将QWindow或者QWidget嵌入到别的进程中的窗口中(windows)
程序员文章站
2022-05-30 15:21:50
...
前提:必须知道另外一个进程的窗口句柄
示例(这里用QWidget距离,QWindow也一样的):
1、首先创建一个进程,创建一个*窗口“Proc 1 Window”并运行
#include "mainwindow.h"
#include <QApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.setWindowTitle("Proc 1 Window");
w.show();
qDebug() << "proc 1 window handle:" << w.winId();
return a.exec();
}
运行效果:
记住Proc 1 Window 的HWND 为‘132510’!
2、创建第二个进程,创建它的*窗口“Proc 2 Window”并运行(记住其中使用的句柄为Proc 1 Window的句柄)
#include "mainwindow.h"
#include <QApplication>
#include <QLabel>
#include <QWindow>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.setStyleSheet("background-color: lightblue;");
//TODO: add a mark label
QLabel text("Proc 2 Window",&w);
text.setStyleSheet("background-color: pink; color: naviy;");
WId proc2Window_HWND = WId(132510);
//TODO: create the proc 1 window delegate
QWindow* proc1Widow = QWindow::fromWinId(proc2Window_HWND);
//TODO: set the proxy widnow handle to proc 2 window
w.setProperty("_q_embedded_native_parent_handle",QVariant(proc2Window_HWND));
//TODO: set the proxy window to proc2 window for parent
w.winId();
w.windowHandle()->setParent(proc1Widow);
w.resize(250,250);
w.move(20,20);
w.show();
return a.exec();
}
运行结果:
这时候你会看到Proc 2 运行之后没有出现新的*窗口,那么怎么办?别急,这时候你打开Proc 1 Window,你就会看到Proc 2 Window 已经嵌入到了Proc 1 Window! 以下为结果图:
其中亮蓝色部分就为Proc 2 Window!
至此就完成了Windows下Qt中将窗口潜入到其他进程窗口的示例!
——
注:这个方式是我刨Qt源码得出的方式,可能会根据不同的Qt版本有所差异。
(未经同意请勿转载!)
上一篇: QWidget嵌入QML窗口中
下一篇: 在QML 中,嵌入QWidget 对象