要获取在应用程序中创建的所有QWidget的列表,我们可以简单地调用 QApplication::allWidgets()
。
我已经阅读了文档,我还没有找到这样的内容来获取所有QObject的列表。如果应用程序创建不是QWidgets的独立QObject,我就没有这样的功能可以使用。
有没有办法获得这样的清单?
要获取在应用程序中创建的所有QWidget的列表,我们可以简单地调用 QApplication::allWidgets()
。
我已经阅读了文档,我还没有找到这样的内容来获取所有QObject的列表。如果应用程序创建不是QWidgets的独立QObject,我就没有这样的功能可以使用。
有没有办法获得这样的清单?
首先,了解它之间的区别非常重要 QObject
和 QWidget
类。
QObject实例有一个指向其父级的指针,该指针可能是也可能不是空指针。只要您了解对该实例的生命周期负责,即如果您不这样做,那么创建一个没有父级的QObject实例是非常合理的。 delete
你会泄漏记忆。
虽然看起来你可以创建一个没有父级的QWidget,但你不能。当您创建QWidget“没有父级”的实例时(即通过提供空指针或将其默认为空指针),它的父级有效地设置为应用程序的QApplication1 实例。
有没有办法获得这样的清单?
不,原因 QApplication::allWidgets()
工作是由于所有QWidget实例都有一个指向它们的指针,它存储在您的单个QApplication实例中。没有QObject指针的中央存储,因此没有内置的检索方法。
解决这个问题的一种方法是确保 你自己 所有QObjects实例(或继承QObject的类的实例)都具有有效的父实例。然后您可以使用QObject函数 儿童(), findChild() 和 findChildren() 获取指向这些对象的指针。
这些都是强大的工具,就像强大的东西一样 小心使用它们!在生产代码中使用它们之前,请确保您了解C ++对象的生命周期。
QApplication
继承自 QCoreApplication
继承自 QObject
。有 一些限制 关于Qt框架如何使用QApplication。