在Qt5中相当于QX11EmbedContainer

在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::fromWinIdQWidget::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相同的回报。

可能有更好的方法来完成这一点,但它为我工作。