gpt4 book ai didi

qt - 获取在应用程序中创建的所有 QObject 的列表

转载 作者:行者123 更新时间:2023-12-04 02:11:10 25 4
gpt4 key购买 nike

要获取在应用程序中创建的所有 QWidget 的列表,我们可以简单地调用 QApplication::allWidgets() .

我已经阅读了文档,但我没有找到类似的内容来获取所有 QObject 的列表。如果应用程序创建了不是 QWidgets 的独立 QObjects,我就没有这样的功能可以使用。

有没有办法获得这样的列表?

最佳答案

首先,了解 QObject 之间的区别很重要。和 QWidget类。

类 QObject

QObject 实例有一个指向其父级的指针,该指针可能是也可能不是空指针。创建一个没有父对象的 QObject 实例是非常合理的,只要您了解该实例的生命周期是您的责任,即如果您不这样做 delete它会泄漏内存。

类 QWidget

虽然看起来你可以在没有父级的情况下创建 QWidget,但你不能。当您创建一个“没有父级”的 QWidget 实例(即通过提供空指针或让它默认为空指针)时,它的父级有效地设置为您的应用程序的 QApplication1 实例。

Is there a method to obtain such a list?



没有。原因 QApplication::allWidgets()有效是因为所有 QWidget 实例都有一个指向它们的指针,该指针存储在您的单个 QApplication 实例中。没有 QObject 指针的中央存储,因此没有内置的检索它们的方法。

解决此问题的一种方法是确保 自己 所有 QObjects 实例(或继承 QObject 的类的实例)都有一个有效的父级。然后你可以使用 QObject 函数 children() , findChild()findChildren()获取指向这些对象的指针。

这些是强大的工具,就像任何强大的工具一样, 小心使用 !在生产代码中使用这些对象之前,请确保您了解 C++ 对象生命周期。



笔记:
  • QApplication继承自 QCoreApplication继承自 QObject .有some restrictions放在 Qt 框架如何使用 QApplication 上。
  • 关于qt - 获取在应用程序中创建的所有 QObject 的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2340988/

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