在Qt4中,embedded一个通用的X11窗口非常简单:
app = QtGui.QApplication(sys.argv) win = QtGui.QWidget() container = QtGui.QX11EmbedContainer(win) win_id = container.winId() #create QProcess passing window id to process process = QtCore.QProcess(container) options = ["-wid", str(win_id)] process.start(MYPROCESS, options)
我无法findQt5的等效步骤。 我看到使用QWindow::fromWinId
和QWidget::createWindowContainer
,但这些工作stream程相反,似乎更适合操作本地Qt窗口。 为了使它工作,我需要得到一个X11窗口的Qt WId
结构,我似乎无法find一个办法。
看起来我的主要问题是与PyQT5的实现有关。 以下代码片段适用于我:
app = QtWidgets.QApplication(sys.argv) win = QtWidgets.QWidget() winID = int(win.winId()) sub_win = QtGui.QWindow.fromWinId(winID) container = QtWidgets.QWidget.createWindowContainer(sub_win) sub_win_id = int(container.winId()) process = QtCore.QProcess(container)
在PyQt5中, QWidget.winId()
返回一个SIP.NULL
指针。 你需要使用int()
来明确地进行转换,以获得与Qt4相同的回报。
可能有更好的方法来完成这一点,但它为我工作。