Qt11中的QX11EmbedContainer等价物

时间:2015-09-21 20:00:17

标签: linux qt

在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::fromWinIdQWidget::createWindowContainer,但这些工作流程相反,似乎更适合操作原生Qt窗口。为了使它工作,我需要得到X11窗口的Qt WId结构,我似乎无法找到一种方法。

1 个答案:

答案 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相同的返回值。

可能有更好的方法来实现这一目标,但它对我有用。