2016-08-20 3 views
2

В какой-то части моего проекта я хочу получить ссылку на окно из списка открытых окон. Таким образом, я делаю так:Как получить QWidget из списка открытых окон

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()){ 
        ^

И я застрял здесь.

+0

Попробуйте добавить '#include ' в файл, где 'WindowUtil :: MainWindow()' определено. – Sergey

+0

Теперь это сработало;) –

+0

Я использовал 'QApplication' в другом месте и не нуждался в #include. Возможно, это потому, что этот класс WindowUtil не имеет отношения к QT. я прав ? –

ответ

2

Даже если ответ уже отправлен как комментарий, эта ошибка должна означать (большую часть времени), что вы не включили правый заголовочный файл, в этом случае: <QApplication> и ваше приложение не может найти объявления для чего хочет.

#include <QApplication> 

инструкция в файле, который вызывает ошибки должен быть эффективным решением вашей проблемы :)