Подтвердить что ты не робот

Qt - QWidget: не удается создать QWidget, когда GUI не используется

Я пытаюсь запустить простую программу Qt, и при этом я получаю окно консоли, в котором упоминаются: QWidget: Cannot create a QWidget when no GUI is being used, а вторая строка This application has requested the Runtime to terminate....., и файл .exe таким образом перестает работать.

Мой файл .pro выглядит следующим образом:

#-------------------------------------------------
#
# Project created by QtCreator 2011-04-02T07:38:50
#
#-------------------------------------------------

QT       += core

QT       += gui

TARGET = Hello
CONFIG += console
CONFIG += qt
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp

Любые идеи по этому поводу?

Спасибо.

4b9b3361

Ответ 1

Проблема не в этом .pro; это, скорее всего, в main.cpp. Qt требует, чтобы вы создали QApplication, прежде чем создавать какие-либо подклассы QWidget (а также некоторые другие классы, такие как QPixmap). Ваша функция main должна начинаться с строки:

QApplication app(argc, argv);

и, вероятно, закончится следующей строкой:

return app.exec();

Между этими вызовами вы должны создать и показать главное окно.

Ответ 2

Я обнаружил, что вы можете сделать это с помощью проекта Qt Console, но, конечно, у него не будет функциональности консольной программы, когда вы закончите с моими изменениями.

Прежде всего вам нужно обменять #include <QtCoreApplication> на #include <QApplication> в main.cpp (где вы запускаете свое приложение)

В main(int,char**){

обмен QCoreApplication a(argc, argv); с QApplication a(argc, argv);

а между QApplication и return a.exec у вас есть ваш виджет и другие связанные с gui вещи

и в конце вы используете return a.exec();}

Ответ 3

Я думаю, я нашел, где проблема.

Поскольку я использую Qt Creator, а при создании нового проекта я выбрал Qt Console Application вместо Qt Gui Application.

Ответ 4

"QWidget: не удается создать QWidget, когда не используется GUI" происходит, когда приложение не является экземпляром QApplication. Из Qt docs:

QApplication специализируется на QGuiApplication с некоторой функциональностью необходимых для приложений на основе QWidget. Он управляет виджетами инициализация, завершение и управление сеансами.

Для любого приложения GUI, использующего Qt, существует только одно приложение QApplication объект, независимо от того, имеет ли приложение 0, 1, 2 или более окон в любой момент времени. Для приложений Qt, отличных от QWidget, используйте QGuiApplication, поскольку это не зависит от QtWidgets библиотека.

Ответ 5

Из документов, класс QApplication управляет потоком управления приложениями GUI и основными настройками в то время как класс QCoreApplication предоставляет цикл событий для консольных приложений Qt

У меня была та же проблема: приложение QT Console по умолчанию использует QCoreApplication вместо QApplication для запуска приложения.

Вот что я сделал, чтобы заставить его работать

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QWidget widget;

    widget.show();

    return a.exec();
}

И я ничего не менял в файле проекта

QT       += core

QT       += gui

TARGET = Layouts
CONFIG   += gui
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp