Qt QWidget::可以从不同的进程中查找Widget吗?
状态文档(除其他外)“如果一个小部件是非本机的(外来的),并且在它上面调用了winId,那么该小部件将被提供一个本机句柄。” 我不确定在这种情况下“外星人”是什么意思,但我现在选择忽略它 所以假设我的小部件现在有一个与之关联的有效本机句柄,那么我可以将该本机句柄传递给另一个进程,并在第二个进程中获得一个有效的QWidget对象吗 除了显示/隐藏小部件并将其附加到父小部件之外,我可能不需要在第二个过程中对小部件执行太多其他操作。(保证在第一个进程中不会附加到任何父窗口小部件,并且在第一个进程的上下文中永远不可见) 如果上述所有措施都有效:Qt QWidget::可以从不同的进程中查找Widget吗?,qt,qwidget,Qt,Qwidget,状态文档(除其他外)“如果一个小部件是非本机的(外来的),并且在它上面调用了winId,那么该小部件将被提供一个本机句柄。” 我不确定在这种情况下“外星人”是什么意思,但我现在选择忽略它 所以假设我的小部件现在有一个与之关联的有效本机句柄,那么我可以将该本机句柄传递给另一个进程,并在第二个进程中获得一个有效的QWidget对象吗 除了显示/隐藏小部件并将其附加到父小部件之外,我可能不需要在第二个过程中对小部件执行太多其他操作。(保证在第一个进程中不会附加到任何父窗口小部件,并且在第一个进程的上下
James让我们看看Qt源代码
QWidget *QWidget::find(WId id)
{
return QWidgetPrivate::mapper ? QWidgetPrivate::mapper->value(id, 0) : 0;
}
find()。mapper
是一个静态QHash
变量。项目仅在QWidgetPrivate::setWinId
方法中插入到此哈希中
因此,如果在另一个进程中创建了具有WId
的小部件,则使用QWidget::find
无法找到它。此函数不使用任何本机OS函数来查找小部件
另请参见Qt文档中外来小部件的一般说明:
Qt4.4中引入的外来小部件是用户不知道的小部件
窗口系统。它们没有关联的本机窗口句柄
和他们在一起。此功能显著加快了小部件的绘制速度,
调整大小,并删除闪烁
您是否希望从所有应用程序(包括非Qt应用程序)获取QWidget?我不知道这在非Qt应用程序上是否可行。不,我有一个非常具体的案例,我可以完全控制这两个Qt应用程序。好的,所以我基本上完蛋了,需要使用本机API调用来解决这个问题。谢谢。:)