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