2016-04-30 25 views
5

Kiedy kompiluję mój projekt qt pokazał poniżej błąd?Nie można utworzyć QWidget bez QApplication

QWidget: Cannot create a QWidget without QApplication 

Na czym polega problem?

main.cpp

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

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

Odpowiedz

6

To oczywiste. Potrzebujesz QApplication, aby uzyskać QWidget. Zmień QGuiApplication na QApplication, a kod będzie działał poprawnie.

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

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

Jeśli chcesz wiedzieć, „Dlaczego istnieje drzewo główne klasy jak QApplication, QGuiApplication i QCoreApplication”, patrz this. Mówi:

QCoreApplication jest klasą bazową, QGuiApplication rozszerza podstawową klasę z funkcjonalności związane z obsługą okna i GUI rzeczy (non-widget związane np OpenGL lub QtQuick) QApplication rozciąga QGuiApplication z funkcjonalnością powiązanej do obsługi widżetów.

Btw, czy nie jest to podstawowy przykład dostępny na Qt Creator? Potrzebujesz książki, żeby nauczyć się Qt, i proponuję przeczytać "C++ GUI Programming with Qt 4 (2nd Edition)" od Jasmin Blanchette.

Qt Book

+1

Kluczowa różnica między QGuiApplication i QApplication książka ta nie obejmie jednak, gdyż jest o Qt 4 i QGuiApplication został wprowadzony w Qt5. –

+0

@FrankOsterfeld Wspomniałem o różnicy między QApplication, QGuiApplication i QCoreApplication od http://www.qtcentre.org/threads/60203. Czy znasz dobrą książkę Qt5? – Ho1

4

należy zmienić QGuiApplication do QApplication w głównym.

Od QGuiApplication Class Description:

Dla aplikacji Qt QWidget opartych używać QApplication zamiast, jak to udostępnia niektóre funkcje potrzebne do tworzenia instancji QWidget.

Powiązane problemy