2016-04-30 4 views
5

Когда я скомпилирую проект qt, который отображается ниже, ошибка?Невозможно создать QWidget без QApplication

QWidget: Cannot create a QWidget without QApplication 

В чем проблема?

main.cpp

#include<QApplication> 
#include"MainWindow.h" 

int main(int argc, char *argv[]) 
{ 
    QGuiApplication app(argc, argv); 
    MainWindow w; 
    w.show(); 
    return app.exec(); 
} 

ответ

6

Это очевидно. Вам нужен QApplication, чтобы иметь QWidget. Измените QGuiApplication на QApplication, и код будет работать нормально.

#include<QApplication> 
#include"MainWindow.h" 

int main(int argc, char *argv[]) 
{ 
    QApplication app(argc, argv); 
    MainWindow w; 
    w.show(); 
    return app.exec(); 
} 

Если вы хотите знать, «Почему есть дерево основные классы, как QApplication, QGuiApplication и QCoreApplication», см this. Он говорит:

QCoreApplication является базовым классом, QGuiApplication расширяет базовый класс с функциональностью, связанных с использованием окна и GUI материал (не виджет, связанные, например, OpenGL или QtQuick), QApplication расширяет QGuiApplication с функциональностью связанной для обработки виджетов.

Btw, разве это не основной пример, доступный на Qt Creator? Вам нужна книга для изучения Qt, и я предлагаю вам прочитать «Программирование на языке C++ с Qt 4 (2nd Edition)» от Jasmin Blanchette.

Qt Book

+1

Решающее различие между QGuiApplication и QApplication эта книга не будет охватывать, хотя, как это о Qt 4 и QGuiApplication был введен в Qt5. –

+0

@FrankOsterfeld Я упомянул разницу между QApplication, QGuiApplication и QCoreApplication с http://www.qtcentre.org/threads/60203. Знаете ли вы хорошую книгу Qt5? – Ho1

4

Вы должны изменить QGuiApplication к QApplication в ваш главный.

От QGuiApplication Class Description:

Для основанного QWidget приложений Qt, используйте QApplication вместо этого, как это предоставляет некоторые функциональные возможности, необходимые для создания экземпляров QWidget.

Смежные вопросы