Qt - QWidget: не удается создать QWidget, когда графический интерфейс не используется - PullRequest
12 голосов
/ 02 апреля 2011

Я пытаюсь запустить простую программу 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

Есть идеи на этот счет?

Спасибо.

Ответы [ 5 ]

17 голосов
/ 02 апреля 2011

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

QApplication app(argc, argv);

и, вероятно, оканчивается такой строкой:

return app.exec();

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

11 голосов
/ 10 августа 2012

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

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

В main(int,char**){

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

имежду QApplication и return a.exec у вас есть виджет и другие связанные с графическим интерфейсом вещи

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

3 голосов
/ 02 апреля 2011

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

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

2 голосов
/ 17 ноября 2012

«QWidget: невозможно создать QWidget, когда графический интерфейс не используется», когда ваше приложение не является экземпляром QApplication.Из Qt docs :

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

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

0 голосов
/ 31 октября 2013

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

Iвозникла та же проблема, консольное приложение QT по умолчанию использует 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
...