2011-04-02 50 views
12

我想運行一個簡單的Qt程序,這樣做的時候,我得到一個控制檯窗口提一個QWidget:QWidget: Cannot create a QWidget when no GUI is being used,第二行This application has requested the Runtime to terminate.....,和因此.exe文件停止工作。的Qt - QWidget的:無法創建時沒有GUI正在使用

.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 

上任何想法?

謝謝。

回答

17

問題不在於此.pro;它很可能在main.cpp。 Qt需要您在創建任何QWidget子類(以及某些其他類,如QPixmap)之前創建一個QApplication。你main功能應與行開始:

QApplication app(argc, argv); 

,並可能會與像行結束:

return app.exec(); 

在這些調用之間,應該創建並顯示您的主窗口。

3

我想我找到了問題所在。

由於我使用的是Qt Creator,並且在創建新項目時,我選擇的是Qt Console Application而不是Qt Gui Application

+1

是,Qt的控制檯應用程序將創建QtCoreApplication這是不貴和爲你啓動一個控制檯。您應該使用QtApplication。 – winterTTr 2011-04-02 07:36:30

+0

另一個說明:GUI需要'QApplication'和'QT + = gui',並且一個控制檯需要使用'QCoreApplication'和'CONFIG + = console'。無論您如何鏈​​接,都無法使用「QT + = gui」顯示控制檯。 (你可以有兩個可執行文件,或者有一個可以調用另一個,或者從你的GUI應用程序實現你自己的控制檯類似的東西。) – charley 2011-07-27 01:14:01

+0

我的問題是一樣的。通過改變「QtCoreApplication」爲「QtApplication」,它工作。 – 2014-09-02 04:39:45

10

我發現你可以用Qt控制檯項目來完成它,但是當你完成我的編輯時,它將不具備控制檯程序的功能。

所有你需要在交流#include <QtCoreApplication>#include <QApplication>首先你main.cpp(你啓動應用程序)

main(int,char**){

交換QCoreApplication a(argc, argv);QApplication a(argc, argv);

和的QApplication之間並返回.exec你有你的部件和其他gui相關的東西

並在最後使用return a.exec();}

+0

這解決了我的問題。 – 2014-09-02 04:38:43

2

當您的應用程序不是QApplication實例時,會發生「QWidget:無法創建QWidget時不使用GUI」。 從Qt docs

QApplication的專業QGuiApplication與需要基於QWidget的應用程序的一些功能 。它處理小部件特定的 初始化,完成並提供會話管理。

對於任何使用Qt的GUI應用程序,只要有一個QApplication 對象,無論應用程序在任何給定時間是否有0,1,2或更多窗口 。對於基於非QWidget的Qt應用程序,請改爲使用 QGuiApplication,因爲它不依賴於QtWidgets 庫。

0

從文檔, 的的QApplication類管理GUI應用程序的控制流和主要設置,而 的QCoreApplication類提供了一個事件循環控制檯Qt應用程序

我有同樣的問題,默認的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 
相關問題