【问题标题】:How to retrieve a QWidget from a list of opened windows如何从打开的窗口列表中检索 QWidget
【发布时间】: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”之类的错误。

标签: c++ qt c++11


【解决方案1】:

即使答案已经作为评论发布,这个错误应该意味着(大部分时间)你没有包含正确的头文件,在这种情况下:<QApplication> 并且你的应用找不到什么声明它想要。

#include <QApplication>

文件中引发错误的指令应该是解决您的问题的有效方法:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-25
    • 1970-01-01
    • 2010-09-20
    • 2014-07-24
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多