दिलचस्प पोस्ट
जावा सुरक्षा अपवाद: हस्ताक्षरकर्ता जानकारी मेल नहीं खाती मैं एक HTML "विकल्प" टैग पर टूलटिप कैसे दिखा सकता हूं? इससे पहले कि कोई फ़ंक्शन फ़्रेम करता हो, क्या मैं पायथन डेकोरेटर पैच कर सकता हूं? जावा: नल सूचक अपवाद जब अनबॉक्सिंग पूर्णांक है? ClassLoader.getResources () सही तरीके से कैसे उपयोग करें? विंडोज में रूबी रत्न को स्थापित करना कैसे चेक करें कि मैप में जाने वाली कोई कुंजी है? निर्धारित करें कि उपयोगकर्ता पंक्तियाँ जोड़ रहा है या हटा रहा है या नहीं जांच कैसे करें कि क्या सुहोसिन स्थापित है? कैसे ढाल के साथ सूत्रों का जार बनाने के लिए बाध्यकारी छवि। स्ट्रिंग को WPF में स्रोत? जावास्क्रिप्ट में दो सरणियों का एक संघ प्राप्त करना जावास्क्रिप्ट ऑब्जेक्ट कुंजी सूची प्राप्त करना विलंब के बीच का अंतर ()। वादा और वादा अक्षरों, संख्याओं और – _ के लिए नियमित अभिव्यक्ति

Qt का उपयोग करते समय कंसोल में प्रिंट कैसे करें

कंप्यूटर ग्राफिक्स में कुछ प्रोग्राम बनाने के लिए मैं क्यूटी 4 और सी ++ का उपयोग कर रहा हूं। मुझे अपने सांत्वना में कुछ चर को रन-टाइम पर डिबग करने के लिए प्रिंट करने में सक्षम होने की आवश्यकता है, लेकिन cout मुझे पुस्तकालयों को जोड़ते हुए भी काम करने में प्रतीत नहीं होता I क्या इसे करने का कोई तरीका है?

Solutions Collecting From Web of "Qt का उपयोग करते समय कंसोल में प्रिंट कैसे करें"

यदि यह stderr को प्रिंट करने के लिए पर्याप्त है, तो आप मूल रूप से डीबगिंग के लिए निम्न धाराओं का उपयोग कर सकते हैं:

 //qInfo is qt5.5+ only. qInfo() << "C++ Style Info Message"; qInfo( "C Style Info Message" ); qDebug() << "C++ Style Debug Message"; qDebug( "C Style Debug Message" ); qWarning() << "C++ Style Warning Message"; qWarning( "C Style Warning Message" ); qCritical() << "C++ Style Critical Error Message"; qCritical( "C Style Critical Error Message" ); // qFatal does not have a C++ style method. qFatal( "C Style Fatal Error Message" ); 

यद्यपि टिप्पणियों में बताया गया है, तो ध्यान रखें कि QT_NO_DEBUG_OUTPUT परिभाषित होने पर qDebug संदेश निकाल दिए जाते हैं

यदि आपको stdout की आवश्यकता होती है तो आप ऐसा कुछ करने की कोशिश कर सकते हैं (जैसा काइल स्ट्रैंड ने बताया है):

 QTextStream& qStdOut() { static QTextStream ts( stdout ); return ts; } 

आप निम्न प्रकार से कॉल कर सकते हैं:

 qStdOut() << "std out!"; 

मैंने यह सबसे उपयोगी पाया:

 #include <QTextStream> QTextStream out(stdout); foreach(QString x, strings) out << x << endl; 

इसे अपनी प्रोजेक्ट फ़ाइल में जोड़ें:

 CONFIG += console 

stdout लिखना

यदि आप कुछ चाहते हैं, जैसे std::cout , आपके एप्लिकेशन के मानक आउटपुट को लिखता है, तो आप केवल निम्नलिखित ( क्रेडिट करने के लिए क्रेडिट कर सकते हैं ):

 QTextStream(stdout) << "string to print" << endl; 

एक अस्थायी QTextStream ऑब्जेक्ट बनाने के बजाय (जो कि बेन व्हाइगेट के अनुसार , अगर किसी अन्य स्ट्रीम को पहले से ही उसी डिस्क्रिप्टर के लिए खुले हैं), तो आपको वास्तव में Yakk के सुझाव को नीचे दिए गए टिप्पणियों का पालन करने के लिए एक static बनाने के लिए एक फ़ंक्शन बनाने के लिए नीचे दिए गए टिप्पणियों का पालन करना चाहिए stdout :

 inline QTextStream& qStdout() { static QTextStream r{stdout}; return r; } ... foreach(QString x, strings) qStdout() << x << endl; 

यह सुनिश्चित करने के लिए समय-समय पर स्ट्रीम को flush करने के लिए याद रखें कि वास्तव में आउटपुट वास्तव में प्रिंट किया गया है।

stderr को लिखना

ध्यान दें कि उपरोक्त तकनीक का उपयोग अन्य आउटपुट के लिए भी किया जा सकता है। हालांकि, stderr को लिखने के लिए और पढ़ने योग्य तरीके हैं ( गोज को क्रेडिट और उनके जवाब के नीचे की टिप्पणी):

 qDebug() << "Debug Message"; // CAN BE REMOVED AT COMPILE TIME! qWarning() << "Warning Message"; qCritical() << "Critical Error Message"; qFatal("Fatal Error Message"); // WILL KILL THE PROGRAM! 

qDebug() बंद है अगर QT_NO_DEBUG_OUTPUT को संकलन-समय पर चालू किया गया है।

(गोज एक टिप्पणी में नोट करता है जो गैर-कंसोल एप्लिकेशन के लिए, ये stderr तुलना में एक अलग स्ट्रीम पर प्रिंट कर सकते हैं।)


नोट: सभी क्यूटी प्रिंट विधियाँ मानते हैं कि const char* arguments is ISO-8859-1 एन्कोडेड स्ट्रिंग्स को टर्मिनल \0 वर्णों के साथ।

क्या आप प्रिंट करना चाहते हैं? यदि आप QStrings मतलब है, उन को सी-स्ट्रिंग में परिवर्तित करने की आवश्यकता है। प्रयत्न:

 std::cout << myString.toAscii().data(); 

यह एक सिंटैक्स भी है जो कि प्रांग्रफ़ के समान है, जैसे:

 qDebug ("message %d, says: %s",num,str); 

बहुत आसान भी है

परियोजना के Properties -> Linker-> System -> SubSystem , फिर इसे Console(/S) सेट Console(/S)

 #include <QTextStream> ... qDebug()<<"Bla bla bla"; 

क्या iostream पुस्तकालय और सटीक को शामिल करने के बारे में है कि cout इस तरह std का एक उद्देश्य है:

 #include <iostream> std::cout << "Hello" << std::endl; 

अगर आप fflush(stderr) लाइब्रेरी का इस्तेमाल करते हुए stderr पर छपाई कर रहे हैं, तो fflush(stderr) को कॉल को बफर फ्लश करना चाहिए और आपको वास्तविक समय लॉगिंग प्राप्त करना चाहिए।

मैंने ऊपर दिए गए सभी नमूने की कोशिश की:

 qInfo() << "C++ Style Info Message"; qInfo( "C Style Info Message" ); qDebug() << "C++ Style Debug Message"; qDebug( "C Style Debug Message" ); qWarning() << "C++ Style Warning Message"; qWarning( "C Style Warning Message" ); qCritical() << "C++ Style Critical Error Message"; qCritical( "C Style Critical Error Message" ); 

qDebug() को छोड़कर सभी प्रदर्शन; नहीं मिल सकता है जहां QT_NO_DEBUG को लागू किया जा सकता है qDebug() मेरे लिए ठीक काम किया है लेकिन qDebug() 17.10 के साथ गायब हो गया

धन्यवाद

खैर, इंटरनेट पर कई उदाहरणों का अध्ययन करने के बाद, क्यूटी से जीटीआई में STDOUT के आउटपुट संदेशों का वर्णन करने के बाद, मैं एक कंसोल में संदेशों को रीडायरेक्ट करने के लिए, एक क्यूडीबॉग () के माध्यम से और qInstallMessageHandler () को स्थापित करने के काम में एक अकेले उदाहरण को परिष्कृत किया है। कंसोल GUI के रूप में एक ही समय में दिखाया जाएगा और अगर आवश्यक समझा जाए तो उसे छिपाया जा सकता है कोड आपके प्रोजेक्ट में मौजूदा कोड के साथ एकीकृत करना आसान है। यहां पूर्ण नमूना है और जब तक आप लाइसेंस जीएनयू जीपीएल v2 का पालन करते हैं, तब तक इसे किसी भी तरह से उपयोग करने में नि: शुल्क लगें। आपको किसी प्रकार का एक रूप और एक मेन-विंडू का उपयोग करना होगा जो मुझे लगता है – अन्यथा नमूना चलाएगा, लेकिन संभवतया दुर्घटना जब छोड़ने के लिए मजबूर हो नोट: क्लोज़ बटन या मेन्यू बंद के माध्यम से छोड़ने का कोई रास्ता नहीं है क्योंकि मैंने उन विकल्पों का परीक्षण किया है और यह एप्लिकेशन अंततः हर बार क्रैश करेगा। बंद बटन के बिना आवेदन स्थिर हो जाएगा और आप इसे मुख्य विंडो से बंद कर सकते हैं। का आनंद लें!

 #include "mainwindow.h" #include <QApplication> //GNU GPL V2, 2015-02-07 #include <QMessageBox> #include <windows.h> #define CONSOLE_COLUMNS 80 #define CONSOLE_ROWS 5000 #define YOURCONSOLETITLE "Your_Console_Title" typedef struct{ CONSOLE_SCREEN_BUFFER_INFOEX conScreenBuffInfoEX; HANDLE con_screenbuf; HWND hwndConsole; HMENU consoleMenu ; QString consoleTitle; QMessageBox mBox; QString localMsg; QString errorMessage; WINBOOL errorCode; } consoleT; static consoleT *console; BOOL WINAPI catchCTRL( DWORD ctrlMsg ){ if( ctrlMsg == CTRL_C_EVENT ){ HWND hwndWin = GetConsoleWindow(); ShowWindow(hwndWin,SW_FORCEMINIMIZE); } return TRUE; } void removeCloseMenu(){ int i; for( i = 0; i < 10; i++){ console->hwndConsole = FindWindowW( NULL, console->consoleTitle.toStdWString().data()); if(console->hwndConsole != NULL) break; } if( !(console->errorCode = 0) && (console->hwndConsole == NULL)) console->errorMessage += QString("\nFindWindowW error: %1 \n").arg(console->errorCode); if( !(console->errorCode = 0) && !(console->consoleMenu = GetSystemMenu( console->hwndConsole, FALSE )) ) console->errorMessage += QString("GetSystemMenu error: %1 \n").arg(console->errorCode); if(!(console->errorCode = DeleteMenu( console->consoleMenu, SC_CLOSE, MF_BYCOMMAND ))) console->errorMessage += QString("DeleteMenu error: %1 \n").arg(console->errorCode); } void initialiseConsole(){ console->conScreenBuffInfoEX.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX); console->consoleMenu = NULL; console->consoleTitle = YOURCONSOLETITLE; console->con_screenbuf = INVALID_HANDLE_VALUE; console->errorCode = 0; console->errorMessage = ""; console->hwndConsole = NULL; console->localMsg = ""; if(!(console->errorCode = FreeConsole())) console->errorMessage += QString("\nFreeConsole error: %1 \n").arg(console->errorCode); if(!(console->errorCode = AllocConsole())) console->errorMessage += QString("\nAllocConsole error: %1 \n").arg(console->errorCode); if( (console->errorCode = -1) && (INVALID_HANDLE_VALUE ==(console->con_screenbuf = CreateConsoleScreenBuffer( GENERIC_WRITE | GENERIC_READ,0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL)))) console->errorMessage += QString("\nCreateConsoleScreenBuffer error: %1 \n").arg(console->errorCode); if(!(console->errorCode = SetConsoleActiveScreenBuffer(console->con_screenbuf))) console->errorMessage += QString("\nSetConsoleActiveScreenBuffer error: %1 \n").arg(console->errorCode); if(!(console->errorCode = GetConsoleScreenBufferInfoEx(console->con_screenbuf, &console->conScreenBuffInfoEX))) console->errorMessage += QString("\nGetConsoleScreenBufferInfoEx error: %1 \n").arg(console->errorCode); console->conScreenBuffInfoEX.dwSize.X = CONSOLE_COLUMNS; console->conScreenBuffInfoEX.dwSize.Y = CONSOLE_ROWS; if(!(console->errorCode = SetConsoleScreenBufferInfoEx(console->con_screenbuf, &console->conScreenBuffInfoEX))) console->errorMessage += QString("\nSetConsoleScreenBufferInfoEx error: %1 \n").arg(console->errorCode); if(!(console->errorCode = SetConsoleTitleW(console->consoleTitle.toStdWString().data()))) console->errorMessage += QString("SetConsoleTitle error: %1 \n").arg(console->errorCode); SetConsoleCtrlHandler(NULL, FALSE); SetConsoleCtrlHandler(catchCTRL, TRUE); removeCloseMenu(); if(console->errorMessage.length() > 0){ console->mBox.setText(console->errorMessage); console->mBox.show(); } } void messageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg){ if((console->con_screenbuf != INVALID_HANDLE_VALUE)){ switch (type) { case QtDebugMsg: console->localMsg = console->errorMessage + "Debug: " + msg; WriteConsoleW(console->con_screenbuf, console->localMsg.toStdWString().data(), console->localMsg.toStdWString().length(), NULL, NULL ); WriteConsoleA(console->con_screenbuf, "\n--\n", 4, NULL, NULL ); break; case QtWarningMsg: console->localMsg = console->errorMessage + "Warning: " + msg; WriteConsoleW(console->con_screenbuf, console->localMsg.toStdWString().data(), console->localMsg.toStdWString().length() , NULL, NULL ); WriteConsoleA(console->con_screenbuf, "\n--\n", 4, NULL, NULL ); break; case QtCriticalMsg: console->localMsg = console->errorMessage + "Critical: " + msg; WriteConsoleW(console->con_screenbuf, console->localMsg.toStdWString().data(), console->localMsg.toStdWString().length(), NULL, NULL ); WriteConsoleA(console->con_screenbuf, "\n--\n", 4, NULL, NULL ); break; case QtFatalMsg: console->localMsg = console->errorMessage + "Fatal: " + msg; WriteConsoleW(console->con_screenbuf, console->localMsg.toStdWString().data(), console->localMsg.toStdWString().length(), NULL, NULL ); WriteConsoleA(console->con_screenbuf, "\n--\n", 4, NULL, NULL ); abort(); } } } int main(int argc, char *argv[]) { qInstallMessageHandler(messageHandler); QApplication a(argc, argv); console = new consoleT(); initialiseConsole(); qDebug() << "Hello World!"; MainWindow w; w.show(); return a.exec(); }