Не создаётся QWidget без Qapplication

244
18 июня 2018, 19:20

Когда я скомпилировал мой qt проект , он показал такую ошибку. Почему ??

QWidget: Cannot create a QWidget without QApplication

Я так и не понял в чём проблема.

#include<QApplication>
#include"MainWindow.h"
int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    MainWindow w;
    w.show();
    return app.exec();
}

Этот вопрос, перевод вопроса https://stackoverflow.com/questions/36951652/cannot-create-a-qwidget-without-qapplication

Answer 1

Это очевидно. Вам нужен 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»,то прочтите абзац ниже.

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

Разве это не основной пример, доступный в Qt Creator? Вам нужна книга для изучения Qt, и я предлагаю вам прочитать «Qt 4: программирование GUI на С++» Жасмин Бланшет.

От переводчика, описание QGuiApplication в книге «Qt 4: программирование GUI на С++» нет.

Из класса QGuiApplication Описание:

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

От себя добавлю в русском языке очень хороша книга "Qt 5.3 профессиональное программирование на С++" Макс Шлее.

READ ALSO
Что значит static class

Что значит static class

Что означает данная конструкция

306
std::future_error при пересоздании std::promise

std::future_error при пересоздании std::promise

Нужно синхронизировать два потока, пока один не запросит данные, другой их не отдает и ждет запроса на данные

288
Абстрактный класс. Наследование

Абстрактный класс. Наследование

Допустим, планируется какая-то система классов, например, устройствУ каждого устройства есть некоторые общие члены, например имя устройства,...

272
Где слабые места в методе?

Где слабые места в методе?

Есть метод, который парсит строку вида ширина:долгота@ширина:долгота@

293