Qt QWidget::可以从不同的进程中查找Widget吗?

Qt QWidget::可以从不同的进程中查找Widget吗?,qt,qwidget,Qt,Qwidget,状态文档(除其他外)“如果一个小部件是非本机的(外来的),并且在它上面调用了winId,那么该小部件将被提供一个本机句柄。” 我不确定在这种情况下“外星人”是什么意思,但我现在选择忽略它 所以假设我的小部件现在有一个与之关联的有效本机句柄,那么我可以将该本机句柄传递给另一个进程,并在第二个进程中获得一个有效的QWidget对象吗 除了显示/隐藏小部件并将其附加到父小部件之外,我可能不需要在第二个过程中对小部件执行太多其他操作。(保证在第一个进程中不会附加到任何父窗口小部件,并且在第一个进程的上下

状态文档(除其他外)“如果一个小部件是非本机的(外来的),并且在它上面调用了winId,那么该小部件将被提供一个本机句柄。”

我不确定在这种情况下“外星人”是什么意思,但我现在选择忽略它

所以假设我的小部件现在有一个与之关联的有效本机句柄,那么我可以将该本机句柄传递给另一个进程,并在第二个进程中获得一个有效的QWidget对象吗

除了显示/隐藏小部件并将其附加到父小部件之外,我可能不需要在第二个过程中对小部件执行太多其他操作。(保证在第一个进程中不会附加到任何父窗口小部件,并且在第一个进程的上下文中永远不可见)

如果上述所有措施都有效:

  • 第二个进程对这个小部件有多大的控制

  • 第一个进程是否会接收用户输入事件,就好像它是附加的一样 到第一个进程的UI,第一个进程是否能够正常更新小部件


  • 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调用来解决这个问题。谢谢。:)