2011-04-02 13 views
12

मैं एक साधारण Qt प्रोग्राम चलाने की कोशिश कर रहा हूं, और ऐसा करने पर, मुझे एक कंसोल विंडो का उल्लेख मिलता है: QWidget: Cannot create a QWidget when no GUI is being used, और दूसरी पंक्ति This application has requested the Runtime to terminate....., और .exe फ़ाइल इस प्रकार काम करना बंद कर देती है।क्यूटी - QWidget: जब कोई जीयूआई उपयोग नहीं किया जा रहा है तो QWidget नहीं बना सकता

मेरी .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 में सबसे अधिक संभावना है। क्यूटी के लिए आपको किसी भी QWidget सबक्लास (साथ ही साथ कुछ अन्य वर्ग, जैसे QPixmap) बनाने से पहले QAplication बनाने की आवश्यकता होती है। , इन कॉल के बीच

return app.exec(); 

में आप बनाते हैं और अपने मुख्य विंडो दिखाया जाना चाहिए: अपने main समारोह लाइन के साथ शुरू करना चाहिए:

QApplication app(argc, argv); 

और शायद की तरह एक लाइन के साथ खत्म हो जाएगा।

3

मुझे लगता है कि मुझे पता चला कि समस्या कहां है।

चूंकि मैं Qt Creator का उपयोग कर रहा हूं, और एक नई परियोजना बनाते समय, मैं Qt Gui Application के बजाय Qt Console Application चुन रहा था।

+1

हाँ, क्यूटी कंसोल आवेदन QtCoreApplication पैदा करेगा जो गैर जीयूआई है और आपके लिए एक कंसोल शुरू करें। आपको इसके बजाय QtAplication का उपयोग करना चाहिए। – winterTTr

+0

एक और नोट: जीयूआई को 'क्यूप्लिकेशंस' और 'क्यूटी + = गुई' की आवश्यकता होती है, और कंसोल को 'क्यूकोर एप्प्लिकेशंस' और 'कॉन्फिग + कंसोल' के उपयोग की आवश्यकता होती है। आप क्यूटी + = गुई 'के साथ प्रदर्शित करने के लिए कंसोल नहीं प्राप्त कर सकते हैं इससे कोई फर्क नहीं पड़ता कि आप कैसे लिंक करते हैं। (आपके पास दो निष्पादन योग्य हो सकते हैं, या एक दूसरे को कॉल कर सकते हैं, या अपने जीयूआई ऐप से अपनी कंसोल जैसी चीज लागू कर सकते हैं।) – charley

+0

मेरी समस्या एक जैसी थी। "QtCoreAplication" को "QtAplication" में बदलकर, यह काम करता है। –

10

मुझे पता चला कि आप इसे क्यूटी कंसोल प्रोजेक्ट के साथ कर सकते हैं, लेकिन जब आप मेरे संपादन के साथ होते हैं तो कंसोल प्रोग्राम की कार्यक्षमता नहीं होगी।

तुम सब में #include <QApplication> साथ #include <QtCoreApplication> का आदान-प्रदान करने की जरूरत है की

सबसे पहले अपने main.cpp (जहाँ आप अपने आवेदन शुरू)

QApplication a(argc, argv);

साथ और QApplication के बीच और एक वापसी में main(int,char**){

विनिमय QCoreApplication a(argc, argv); में

.exec आपके पास अपना विजेट और अन्य गुई संबंधित सामान

और अंत में आप उपयोग करते हैं return a.exec();}

+0

जिसने मेरी समस्या का समाधान किया। –

2

"QWidget: जब कोई GUI उपयोग नहीं किया जा रहा है तो QWidget नहीं बना सकता" तब होता है जब आप QAplication उदाहरण नहीं होते हैं। Qt docs से:

QApplication कुछ कार्यक्षमता QWidget आधारित अनुप्रयोगों के लिए आवश्यक के साथ QGuiApplication माहिर हैं। यह विजेट विशिष्ट प्रारंभिकरण, अंतिमकरण, और सत्र प्रबंधन प्रदान करता है।

क्यूटी उपयोग कर किसी भी जीयूआई आवेदन के लिए, वहाँ ठीक एक QApplication वस्तु, कोई फर्क नहीं पड़ता कि क्या आवेदन 0, 1, 2 या अधिक खिड़कियां किसी भी समय पर है। गैर-QWidget आधारित Qt अनुप्रयोगों के लिए, QGui एप्लिकेशन का उपयोग करें, क्योंकि यह QtWidgets लाइब्रेरी पर निर्भर नहीं है।

0

डॉक्स से, QApplication वर्ग, जीयूआई आवेदन के नियंत्रण प्रवाह और मुख्य सेटिंग्स जबकि QCoreApplication वर्ग मैं एक ही समस्या थी सांत्वना क्यूटी अनुप्रयोगों

के लिए एक घटना पाश प्रदान करता है का प्रबंधन करता है डिफ़ॉल्ट क्यूटी कंसोल ऐप एप्लिकेशन चलाने के लिए QApplication के बजाय QCoreAplication का उपयोग करता है।

यहाँ क्या मैं इसे

#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 
संबंधित मुद्दे