दिलचस्प पोस्ट
अजगर मॉड्यूल का संस्करण कैसे जांच सकता है? DISPLAY अनिवार्य है, जब matplotlib के साथ एक पीएनजी उत्पन्न रिमैप, नॉरमैप, नॉरमॅप और vnoremap मैपिंग कमांड के बीच अंतर क्या है? सीडीएटीए एचटीएमएल-सीडीएक्स का प्रयोग करके एक्सएमएल का उपयोग कैसे करें? पायथन 3 में क्यों नहीं str.translate काम करता है? एओएसपी के लिए एंड्रॉइड डिवाइस कॉन्फ़िगरेशन सी प्रोग्राम में वर्तमान निर्देशिका कैसे प्राप्त करें? रिफ्लेक्शन MethodInfo.Invoke () विधि के अंदर से अपवाद पकड़ो माइक्रोसॉफ्ट ऑफिस का उपयोग करते हुए एक मेल कैसे भेजें। जावास्क्रिप्ट: LINK पर लोड ईवेंट कैप्चर करना ओरेकल SQL में तिथियों की तुलना करना JSON ऑर्डर को मिश्रित किया गया java: फ़्लोट को फ्लोट में स्ट्रिंग और स्ट्रिंग में कनवर्ट करें जावा: एक कंस्ट्रक्टर में एक नया थ्रेड प्रारंभ करना सेलेनियम के साथ ब्राउज़र लॉग कैप्चर करना

क्यूटी जीयूआई एप में कंसोल आउटपुट?

मेरे पास एक क्यूटी जीयूआई एप्लीकेशन है जो Windows पर चलने वाले कमांड लाइन विकल्प को अनुमति देता है और कुछ परिस्थितियों में मैं सांत्वना के लिए एक संदेश आउटपुट करना चाहता हूं और फिर बाहर निकलना चाहता हूं, उदाहरण के लिए:

int main(int argc, char *argv[]) { QApplication a(argc, argv); if (someCommandLineParam) { std::cout << "Hello, world!"; return 0; } MainWindow w; w.show(); return a.exec(); } 

हालांकि, कंसोल संदेशों को प्रकट नहीं होता है जब मैं कमांड-प्रॉम्प्ट से ऐप चला करता हूं क्या किसी को पता है कि मैं यह कैसे काम करने के लिए मिल सकता है?

Solutions Collecting From Web of "क्यूटी जीयूआई एप में कंसोल आउटपुट?"

विंडोज वास्तव में दोहरी मोड अनुप्रयोगों का समर्थन नहीं करता है

कंसोल आउटपुट देखने के लिए आपको एक कंसोल एप्लिकेशन बनाने की आवश्यकता है

 CONFIG += console 

हालांकि, यदि आप जीयूआई मोड संस्करण को शुरू करने के लिए प्रोग्राम पर डबल क्लिक करते हैं तो आपको एक कंसोल विंडो दिखाई देगी, जो संभवतः आप नहीं चाहते हैं। प्रदर्शित कंसोल विंडो को रोकने के लिए आपको एक GUI मोड अनुप्रयोग बनाना होगा, जिस स्थिति में आपको कंसोल में कोई आउटपुट नहीं मिलता है।

एक विचार एक दूसरा छोटा अनुप्रयोग बना सकता है जो एक कंसोल अनुप्रयोग है और आउटपुट प्रदान करता है। यह काम करने के लिए दूसरे को कॉल कर सकता है।

या फिर आप सभी कार्यक्षमता को डीएलएल में डाल सकते हैं, तो .exe फ़ाइल के दो संस्करण बनाते हैं जो डीएलएल में कॉल करने वाले बहुत ही सरल मुख्य फ़ंक्शन होते हैं। एक जीयूआई के लिए है और एक कंसोल के लिए है

QT += gui का उपयोग करते समय सांत्वना देने के लिए कोई संदेश आउटपुट करने का कोई तरीका नहीं है

fprintf(stderr, ...) भी आउटपुट प्रिंट नहीं कर सकता।

संदेश दिखाने के बजाय QMessageBox उपयोग करें

ओह, आप QT += gui और CONFIG += console का उपयोग करते समय एक संदेश आउटपुट कर सकते हैं।

आपको printf("foo bar") लेकिन cout << "foo bar" काम नहीं करता है

 void Console() { AllocConsole(); FILE *pFileCon = NULL; pFileCon = freopen("CONOUT$", "w", stdout); COORD coordInfo; coordInfo.X = 130; coordInfo.Y = 9000; SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT_HANDLE), coordInfo); SetConsoleMode(GetStdHandle(STD_OUTPUT_HANDLE),ENABLE_QUICK_EDIT_MODE| ENABLE_EXTENDED_FLAGS); } int main(int argc, char *argv[]) { Console(); std::cout<<"start@@"; qDebug()<<"start!"; 

आप std :: cout का उपयोग दूसरों के रूप में नहीं कर सकते हैं, मेरा तरीका भी सही है क्योंकि कुछ कोड में "qdebug" शामिल नहीं हो सकता!

जोड़ें:

 #ifdef _WIN32 if (AttachConsole(ATTACH_PARENT_PROCESS)) { freopen("CONOUT$", "w", stdout); freopen("CONOUT$", "w", stderr); } #endif 

main() के शीर्ष पर इससे केवल कंसोल में आउटपुट को सक्षम किया जायेगा यदि प्रोग्राम कंसोल में शुरू हो, और अन्य स्थितियों में कंसोल विंडो को पॉप अप नहीं करेगा। यदि आप किसी कंसोल के बाहर ऐप चलाते समय संदेश प्रदर्शित करने के लिए कंसोल विंडो बनाना चाहते हैं तो आप हालत को बदल सकते हैं:

 if (AttachConsole(ATTACH_PARENT_PROCESS) || AllocConsole()) 

मैंने अपनी परियोजनाओं के लिए इस शीर्ष लेख का उपयोग किया था आशा करता हूँ की ये काम करेगा।

 #ifndef __DEBUG__H #define __DEBUG__H #include <QtGui> static void myMessageOutput(bool debug, QtMsgType type, const QString & msg) { if (!debug) return; QDateTime dateTime = QDateTime::currentDateTime(); QString dateString = dateTime.toString("yyyy.MM.dd hh:mm:ss:zzz"); switch (type) { case QtDebugMsg: fprintf(stderr, "Debug: %s\n", msg.toAscii().data()); break; case QtWarningMsg: fprintf(stderr, "Warning: %s\n", msg.toAscii().data()); break; case QtCriticalMsg: fprintf(stderr, "Critical: %s\n", msg.toAscii().data()); break; case QtFatalMsg: fprintf(stderr, "Fatal: %s\n", msg.toAscii().data()); abort(); } } #endif 

पुनश्च: यदि आप भविष्य में चाहते हैं तो आप dateString को आउटपुट में जोड़ सकते हैं।

कुछ ऐसी चीज़ जिसे आप विंडोज़ के लिए कम से कम जांच कर सकते हैं, विंडोज़ एपीआई में ऑलोकसंसोल () फ़ंक्शन है यह GetStdHandle को कई बार stdout, stderr, आदि रीडायरेक्ट करने के लिए कहता है। (एक त्वरित परीक्षण यह दिखाता है कि यह पूरी तरह से पूरी तरह से काम नहीं करता है, जो हम करना चाहते हैं। आपको कंसोल विंडो आपके अन्य क्यूटी सामान के साथ खुलती है, लेकिन आप संभाव्यतः, क्योंकि कंसोल खिड़की खुली है, इस पर पहुंचने का कोई तरीका है, इसे संभाल लेना या किसी तरह का उपयोग करना और उसे हेरफेर करना है। यहां उन लोगों के लिए एमएसडीएन दस्तावेज है जो इसे ढूँढ़ने में दिलचस्पी रखते हैं:

AllocConsole (): http://msdn.microsoft.com/en-us/library/windows/desktop/ms681944%28v=vs.85%29.aspx

GetStdHandle (…): http://msdn.microsoft.com/en-us/library/windows/desktop/ms683231%28v=vs.85%29.aspx

(मैं इसे एक टिप्पणी के रूप में जोड़ूंगा, लेकिन नियम मुझे ऐसा करने से रोकते हैं …)

सबसे पहले, रिलीज मोड निर्माण में कंसोल को आउटपुट करने के लिए आपको क्यों आवश्यकता होगी? कोई भी वहाँ नहीं होगा जब वहाँ एक GUI देखो …

दूसरा, qDebug फैंसी है 🙂

तीसरा, आप अपने .pro के CONFIG console को जोड़ने का प्रयास कर सकते हैं, यह काम कर सकता है

आपके .pro में जोड़ें

 CONFIG += console 

यह अन्य जवाबों का निरीक्षण हो सकता है या शायद यह वास्तव में कंसोल आउटपुट की आवश्यकता के लिए उपयोगकर्ता की आवश्यकता है, लेकिन मुझे इसका स्पष्ट जवाब एक द्वितीयक विंडो बनाना है जो दिखाया या छिपाया जा सकता है (चेकबॉक्स या बटन के साथ) जो सभी संदेशों को एक पाठ बॉक्स विजेट में पाठ की लाइनें जोड़कर और एक कंसोल के रूप में उपयोग करते हैं?

ऐसे समाधान के लाभ हैं:

  • एक सरल समाधान (यह सभी को दिखाता है एक सरल लॉग है)।
  • मुख्य एप्लिकेशन विंडो पर 'कंसोल' विजेट को गोदी करने की क्षमता। (क्यूटी में, किसी भी तरह)
  • कई कंसोल बनाने की क्षमता (1 से अधिक थ्रेड, आदि)
  • क्लाइंट को नेटवर्क पर लॉग ऑन करने के लिए स्थानीय कंसोल आउटपुट से बहुत आसान बदलाव।

आशा है कि यह आपको सोचा के लिए भोजन देता है, हालांकि मैं किसी भी तरह से अभी तक यह नहीं समझता कि आप यह कैसे करना चाहिए, मैं सोच सकता हूं कि हम में से किसी के द्वारा थोड़ा शोध / पढ़ने के साथ यह बहुत कुछ हासिल कर सकता है!

सुनिश्चित करें कि Qt5Core.dll आपके एप्लिकेशन निष्पादन योग्य के साथ एक ही निर्देशिका में है।

मुझे एक कंसोल एप्लीकेशन के साथ क्यूटी 5 में एक समान समस्या थी: अगर मैं क्यूटी क्रिएटर से एप्लिकेशन को प्रारंभ करता हूं, तो आउटपुट टेक्स्ट दिखाई देता है, अगर मैं सीएमडी.एक्सए खोलता हूं और वहां उसी एप्लीकेशन को शुरू करता हूँ, तो कोई आउटपुट दिखाई नहीं दे रहा है बहुत अजीब!

मैंने इसे Qt5Core.dll को नकल करने के लिए आवेदन निष्पादन योग्य के साथ निर्देशिका में हल किया।

यहां मेरा छोटा कंसोल एप्लीकेशन है:

 #include <QCoreApplication> #include <QDebug> int main(int argc, char *argv[]) { int x=343; QString str("Hello World"); qDebug()<< str << x<<"lalalaa"; QTextStream out(stdout); out << "aldfjals alsdfajs..."; } 

मैं भी इस के साथ खेला, पता चला कि रीडायरेक्ट आउटपुट काम करता है, लेकिन मैंने कंसोल विंडो में आउटपुट को कभी नहीं देखा, जो हर विंडोज़ अनुप्रयोग के लिए मौजूद है। यह अब तक मेरा समाधान है, जब तक कि मुझे शोवाइंडो और गेटकॉनोल के लिए क्यूटी प्रतिस्थापन नहीं मिल रहा है।

पैरामीटर के बिना कमांड प्रॉम्प्ट से इसे चलाएं – विंडो प्राप्त करें मापदंडों से कमांड प्रॉम्प्ट से चलें (जैसे। सीएमडी एएए बीबीबी सीसीसी) – आप कमांड प्रॉम्प्ट विंडो पर पाठ आउटपुट प्राप्त करते हैं – जैसे ही आप किसी भी विंडोज कन्सोल ऐप के लिए अपेक्षा करते हैं

लंगड़ा उदाहरण को माफ़ करें – यह टिंकरिंग के लगभग 30 मिनट का प्रतिनिधित्व करता है

 #include "mainwindow.h" #include <QTextStream> #include <QCoreApplication> #include <QApplication> #include <QWidget> #include <windows.h> QT_USE_NAMESPACE int main(int argc, char *argv[]) { if (argc > 1) { // User has specified command-line arguments QCoreApplication a(argc, argv); QTextStream out(stdout); int i; ShowWindow (GetConsoleWindow(),SW_NORMAL); for (i=1; i<argc; i++) out << i << ':' << argv [i] << endl; out << endl << "Hello, World" << endl; out << "Application Directory Path:" << a.applicationDirPath() << endl; out << "Application File Path:" << a.applicationFilePath() << endl; MessageBox (0,(LPCWSTR)"Continue?",(LPCWSTR)"Silly Question",MB_YESNO); return 0; } else { QApplication a(argc, argv); MainWindow w; w.setWindowTitle("Simple example"); w.show(); return a.exec(); } } 

वास्तव में एक ही समस्या के साथ एक लंबे समय तक संघर्ष के बाद मैंने पाया कि बस

 CONFIG += console 

वास्तव में चाल है यह तब तक काम नहीं करेगा जब तक कि आप स्पष्ट रूप से QtCreator को परियोजना पर क्यूमेक निष्पादित करने के लिए कहें (प्रोजेक्ट पर राइट क्लिक करें) और स्रोत फ़ाइल के अंदर कुछ परिवर्तन करें, फिर पुन: बनाएं अन्यथा संकलन छोड़ा गया है और आप अभी भी कमांड लाइन पर आउटपुट नहीं देखेंगे। अब मेरा कार्यक्रम जीयूआई और सीएमडी लाइन मोड दोनों में काम करता है।

आसान

चरण 1: नया प्रोजेक्ट बनाएं जाओ फ़ाइल-> नई फ़ाइल या परियोजना -> अन्य परियोजना -> खाली परियोजना

चरण 2: नीचे कोड का उपयोग करें

प्रोफ़ाइल में

 QT +=widgets CONFIG += console TARGET = minimal SOURCES += \ main.cpp 

चरण 3: मेन सीपीपी बनाएं और नीचे कोड कॉपी करें।

 #include <QApplication> #include <QtCore> using namespace std; QTextStream in(stdin); QTextStream out(stdout); int main(int argc, char *argv[]){ QApplication app(argc,argv); qDebug() << "Please enter some text over here: " << endl; out.flush(); QString input; input = in.readLine(); out << "The input is " << input << endl; return app.exec(); } 

मैंने आपकी समझ के लिए कोड में आवश्यक वस्तुओं को बनाया है।

बस इसे चलाएँ

यदि आप चाहते हैं कि आपका प्रोग्राम कुछ शर्तों के साथ कई इनपुट प्राप्त करे। फिर नीचे दिए गए कोड को Main.cpp में पिछले

 #include <QApplication> #include <QtCore> using namespace std; QTextStream in(stdin); QTextStream out(stdout); int main(int argc, char *argv[]){ QApplication app(argc,argv); qDebug() << "Please enter some text over here: " << endl; out.flush(); QString input; do{ input = in.readLine(); if(input.size()==6){ out << "The input is " << input << endl; } else { qDebug("Not the exact input man"); } }while(!input.size()==0); qDebug(" WE ARE AT THE END"); // endif return app.exec(); } // end main 

आशा है कि यह आपको शिक्षित करेगा

अच्छा दिन,

सबसे पहले आप बफर फ्लश करने की कोशिश कर सकते हैं

 std::cout << "Hello, world!"<<std::endl; 

अधिक Qt आधारित लॉगिंग के लिए आप qDebug का उपयोग करने का प्रयास कर सकते हैं।