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

Qt 获取在应用程序中创建的所有QObject的列表,qt,qwidget,qobject,Qt,Qwidget,Qobject,要获得应用程序中创建的所有QWidgets的列表,我们只需调用QApplication::allWidgets() 我已经阅读了文档,还没有找到类似的东西来获得所有QoObject的列表。如果应用程序创建的独立QObject不是QWidgets,那么我就没有这样的函数可以使用 有没有一种方法可以获得这样的列表?首先,了解QObject和QWidget类之间的区别很重要 类QObject QObject实例有一个指向其父对象的指针,该指针可能是空指针,也可能不是空指针。在没有父对象的情况下创建QO

要获得应用程序中创建的所有QWidgets的列表,我们只需调用
QApplication::allWidgets()

我已经阅读了文档,还没有找到类似的东西来获得所有QoObject的列表。如果应用程序创建的独立QObject不是QWidgets,那么我就没有这样的函数可以使用


有没有一种方法可以获得这样的列表?

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

类QObject QObject实例有一个指向其父对象的指针,该指针可能是空指针,也可能不是空指针。在没有父对象的情况下创建QObject实例是完全合法的,只要您知道这是您对该实例生命周期的责任,即如果您不
删除它,您将泄漏内存

类QWidget 尽管看起来您可以在没有父对象的情况下创建QWidget,但您不能。当您创建一个QWidget的实例“没有父对象”(即通过提供空指针或让它默认为空指针)时,它的父对象实际上被设置为应用程序的QApplication1实例

有没有办法获得这样一份清单

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

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

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



笔记:
  • QApplication
    继承自
    QCoreApplication
    ,它继承自
    QObject
    。关于Qt框架如何使用QApplication,有很多问题需要讨论