gpt4 book ai didi

qt - QWidget::find 可以从不同的进程中找到小部件吗?

转载 作者:行者123 更新时间:2023-12-04 12:41:40 27 4
gpt4 key购买 nike

QWidget::winId 的文档声明(除其他外)“如果小部件是非本地(外来的)并且在其上调用了 winId,则将为该小部件提供一个本地句柄。”

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

因此,假设我的小部件现在具有与之关联的有效 native 句柄,然后我可以将该 native 句柄传递给另一个进程并传递给 QWidget::find并在第二个进程中取回一个有效的 QWidget 对象?

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

如果以上都有效:

  • 第二个进程对该小部件有多少控制权?
  • 第一个进程是否会像附加的一样接收用户输入事件
    到第一个进程的 UI,第一个进程是否能够正常更新小部件?

  • 詹姆士

    最佳答案

    我们来看看 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 找到它.此函数不使用任何 native 操作系统函数来查找小部件。

    另请参阅 Qt 文档中对外星人小部件的一般描述:

    Introduced in Qt 4.4, alien widgets are widgets unknown to the windowing system. They do not have a native window handle associated with them. This feature significantly speeds up widget painting, resizing, and removes flicker.

    关于qt - QWidget::find 可以从不同的进程中找到小部件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17319853/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com