gpt4 book ai didi

qt - 每当 QWidget 添加到 QApplication 的小部件树时如何接收事件?

转载 作者:行者123 更新时间:2023-11-28 21:26:33 25 4
gpt4 key购买 nike

我想检查应用范围内的东西。具体来说,我想检查添加到应用程序的每个小部件。

类似的事情可以在 JavaScript/HTML 中完成,您可以在其中添加在 DOM 更改时触发的 DOM 突变监听器。

我可以在 QApplication 上监听添加的小部件吗?具体来说,捕获作为子对象添加到 QApplication 对象的小部件,或者添加到任何顶级小部件或它们的子、子子等的小部件......

如果不可能,最好的解决方法是什么?

最佳答案

最稳定的解决方案可能是经常遍历对象层次结构,从 QApplication 作为根开始,并使用您的谓词检查每个对象。这将是低效的,这就是为什么我要求提供有关您实际想要查询的对象的更多信息的原因。另一方面,对于测试框架,您可能不太关心效率。

但是,也许可以做其他事情。您可以在任何 QObject 上安装事件过滤对象,这些对象定义了当它们从 Qt 的事件系统接收到事件时如何响应。您可以在根 QApplication 对象上安装一个事件过滤器(并递归地在任何创建的子对象上)来检查事件是否是 QChildEvent 以及是否 added() 为它返回 true。如果是这样,意味着添加了一个新的子项,那么您也可以将此事件过滤器安装到该子项上。所有其他事件将原封不动地传递下去。您可以阅读有关安装事件过滤器的更多信息 here.从本质上讲,过滤器是一个 QObject 子类,它定义了 eventFilter() 函数,该函数为应该过滤(停止)的事件返回 true,否则返回 false。当它返回 true 时,在新创建的对象上运行您的谓词并在其上安装相同的事件过滤器。

需要注意的一个问题是 eventFilter() 函数只接收 QObject。您可以通过调用 isWidgetType() 了解该对象是否为 QWidget,但您所知道的不止这些。因此,只要您的谓词可以仅使用为这些通用基类定义的方法和数据,就可以了。

关于qt - 每当 QWidget 添加到 QApplication 的小部件树时如何接收事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39155748/

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