如何从打开的窗口列表中检索 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的主要内容,如果未能解决你的问题,请参考以下文章

对从数据库中检索到的数据进行分页后,模式窗口不会打开

确定打开窗口的顺序

如何直接在网页中打开文件 不出现下载保存提示框!

从 Windows 注册表中保存的工作区中检索窗口位置

如何检索 websocket 连接列表?

如何从 chrome 获取打开的标签列表? | C#