的文档QWidget::winId状态(除其他外)“如果一个小部件是非本机(外星人)并且在其上调用 winId,则将为该小部件提供本机句柄。”
我不确定“外星人”在这种情况下意味着什么,但我现在选择忽略它。 :)
因此,假设我的小部件现在有一个与之关联的有效本机句柄,我可以将该本机句柄传递给另一个进程并进入QWidget::查找并在第二个进程中获取有效的 QWidget 对象?
除了显示/隐藏它并将其附加到父窗口小部件之外,我可能不需要在第二个进程中对窗口小部件做太多其他事情。 (保证它不会附加到第一个进程中的任何父窗口小部件,并且在第一个进程的上下文中永远不可见)。
如果以上所有方法都有效:
第二个进程对该小部件有多少控制权?
第一个进程是否会像附加一样接收用户输入事件
到第一个进程的 UI,第一个进程是否能够正常更新小部件?
James
让我们看一下Qt 源码。
QWidget *QWidget::find(WId id)
{
return QWidgetPrivate::mapper ? QWidgetPrivate::mapper->value(id, 0) : 0;
}
find()
仅当满足以下条件时才能找到小部件mapper
包含它。这mapper
是一个静态的QHash<WId, QWidget *>
多变的。项目仅插入到此哈希中QWidgetPrivate::setWinId
方法。
所以,如果一个小部件带有WId
是在另一个进程中创建的,您无法使用它找到它QWidget::find
。此函数不使用任何本机操作系统函数来查找小部件。
另请参阅 Qt 文档中外来小部件的一般描述:
Qt 4.4 中引入的外来小部件是人们不知道的小部件
窗口系统。它们没有关联的本机窗口句柄
跟他们。此功能显着加快了小部件的绘制速度,
调整大小并消除闪烁。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)