我想在Windows中嵌入一个Qt应用程序(不是反过来,因为已经有很多其他问题得到了回答)。要澄清的是,我有一个Win32应用程序,我启动了一个qt python进程;这个qt python进程必须嵌入win32应用程序中。如何做到这一点?在
QWindow::fromWinId
的API中,它明确表示:
"创建由另一个进程或使用低于Qt的本地库创建的窗口的本地表示...."
"...这可以在支持它的平台上用于将QWindow嵌入本机窗口中,或将本机窗口嵌入QWindow中。"
其次,QWidget::createWindowContainer
似乎仅适用于在Qt中嵌入本机窗口(不是我想要的方式)。
我不确定如何在QWindow
内创建QWidget
。从这个问题中,似乎方法是使用带有QWindow::fromWinId
的QQuickView
;但是,我找不到如何将QWidget绑定到QQuickView中。
目前,我实际上是使用::SetParent
设置父级,但是那里有一些奇怪的消息协议需要处理,因此我想尝试使用Qt的方法进行重构。
迄今为止编写的一些基本代码(PySide2,但C++或任何其他具有Qt绑定的语言也可以):
app = QApplication(sys.argv)
hwnd = int(sys.argv[1], 16)
nativeParentWindow = QWindow.fromWinId(hwnd)
quickview = QQuickView(nativeParentWindow)
# this part is incorrect (tries to embed native window into qt)
# I want this application to run embedded inside hwnd
wrongWidget = QWidget.createWindowContainer(quickview)
wrongWidget.show()
sys.exit(app.exec_())
fromWinId
的文档明确说明这是可能的。 - Michael Choi