在Qt4中,嵌入通用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)
我找不到Qt5的等效步骤。我看到要使用的建议
QWindow::fromWinId
和QWidget::createWindowContainer
,但这些工作流程相反,似乎更适合操作原生Qt窗口。为了使它工作,我需要得到X11窗口的Qt WId
结构,我似乎无法找到一种方法。
答案 0 :(得分:1)
看起来我的主要麻烦与Python 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相同的返回值。
可能有更好的方法来实现这一目标,但它对我有用。