2011-04-02 41 views
12

Estoy tratando de ejecutar un programa simple Qt, y al hacerlo, aparece una ventana de consola que menciona: QWidget: Cannot create a QWidget when no GUI is being used, y la segunda línea This application has requested the Runtime to terminate....., y El archivo .exe deja de funcionar.Qt - QWidget: No se puede crear un QWidget cuando no se usa ninguna GUI

Mi archivo .pro se ve de la siguiente manera:

#------------------------------------------------- 
# 
# 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 

¿Alguna idea sobre eso?

Gracias.

Respuesta

17

El problema no está en este .pro; lo más probable es que esté en main.cpp. Qt requiere que cree una QApplication antes de crear cualquier subclase QWidget (así como ciertas otras clases, como QPixmap). Su función main debe comenzar con la línea:

QApplication app(argc, argv); 

y probablemente terminará con una línea como:

return app.exec(); 

En medio de estas llamadas, se debe crear y mostrar su ventana principal.

3

Creo que he encontrado dónde está el problema.

Dado que estoy usando Qt Creator, y al crear un nuevo proyecto, estaba eligiendo Qt Console Application en lugar de Qt Gui Application.

+1

Sí, Qt aplicación de consola creará QtCoreApplication que es no-GUI y inicia una consola para ti Debería usar QtApplication en su lugar. – winterTTr

+0

Otra nota: la GUI requiere 'QApplication' y' QT + = gui', y una consola requiere el uso de 'QCoreApplication' y' CONFIG + = console'. No se puede mostrar una consola con 'QT + = gui' sin importar cómo se vincule. (Puede tener dos ejecutables, o tener una llamada a la otra, o implementar su propia consola desde su aplicación GUI). – charley

+0

Mi problema era el mismo. Al cambiar "QtCoreApplication" a "QtApplication", funcionó. –

10

Descubrí que puedes hacerlo con un proyecto de Qt Console, pero por supuesto no tendrá la funcionalidad de un programa de consola cuando hayas terminado con mis ediciones.

En primer lugar usted necesita intercambiar #include <QtCoreApplication> con #include <QApplication> en su main.cpp (donde se inicia su aplicación)

En el intercambio main(int,char**){

QCoreApplication a(argc, argv); con QApplication a(argc, argv);

y entre QApplication y devolver una .exec tiene su widget y otras cosas relacionadas con la interfaz gráfica de usuario

y al final lo usa return a.exec();}

+0

Eso resolvió mi problema. –

2

"QWidget: No se puede crear un QWidget cuando no se utiliza ninguna GUI" sucede cuando la aplicación no es una instancia de QApplication. De Qt docs:

QApplication especializa QGuiApplication con algunas funciones necesario para las aplicaciones basadas en QWidget. Maneja la inicialización, finalización y administración de sesiones específicas del widget .

Para cualquier aplicación de GUI que utilice Qt, existe precisamente un objeto QApplication , sin importar si la aplicación tiene 0, 1, 2 o más ventanas en un momento dado. Para las aplicaciones Qt que no sean QWidget, use QGuiApplication, ya que no depende de la biblioteca QtWidgets .

0

De la documentación, la clase QApplication gestiona el flujo de control de la aplicación de interfaz gráfica de usuario y las configuraciones principales, mientras que la clase QCoreApplication proporciona un bucle de eventos para aplicaciones de consola Qt

que tenía el mismo problema, la aplicación de consola QT predeterminada usa QCoreApplication en lugar de QApplication para ejecutar la aplicación.

Esto es lo que hice para hacer que funcione

#include <QApplication> 

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

    QWidget widget; 

    widget.show(); 

    return a.exec(); 
} 

y no cambia nada en mi archivo de proyecto

QT  += core 

QT  += gui 

TARGET = Layouts 
CONFIG += gui 
CONFIG -= app_bundle 

TEMPLATE = app 


SOURCES += main.cpp 
Cuestiones relacionadas