如何从打开的窗口列表中检索 QWidget
Posted
技术标签:
【中文标题】如何从打开的窗口列表中检索 QWidget【英文标题】:How to retrieve a QWidget from a list of opened windows 【发布时间】:2016-08-20 13:34:21 【问题描述】:在我的项目的某些部分,我想从打开的窗口列表中获取窗口的引用。 所以,我是这样做的:
QWidget* WindowUtil::mainWindow()
QWidget* main_window = nullptr;
for(QWidget *window: QApplication::allWidgets())
if(QString(window>metaObject()->className()).contains("Home"))
main_window = window;
break;
return main_window;
WindowUtil
是我项目的类,mainWindow()
是静态方法。
但是,此解决方案不起作用。编译器说:
error: incomplete type 'QApplication' used in nested name specifier
for(QWidget *window : QApplication::allWidgets())
^
我被困在这里了。
【问题讨论】:
尝试将#include <QApplication>
添加到定义WindowUtil::mainWindow()
的文件中。
我在其他地方使用过QApplication
,不需要#include。也许是因为这个 WindowUtil 类与 QT 没有关系。我说的对吗?
我不知道WindowUtil
类是什么,但可能是的。当您认为您没有包含 QApplication
标头时,您实际上是隐含地包含了它,因为它包含在其他一些文件中,这些文件包含在您使用 QApplication
的文件中。 #include
指令是递归的。例如,尝试将任何文件包含到自己(没有包含保护),您将收到类似“#include nested too deep”之类的错误。
【参考方案1】:
即使答案已经作为评论发布,这个错误应该意味着(大部分时间)你没有包含正确的头文件,在这种情况下:<QApplication>
并且你的应用找不到什么声明它想要。
#include <QApplication>
文件中引发错误的指令应该是解决您的问题的有效方法:)
【讨论】:
以上是关于如何从打开的窗口列表中检索 QWidget的主要内容,如果未能解决你的问题,请参考以下文章