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
Любые идеи по этому поводу?
Спасибо.
Ответы
Ответ 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