आप qInstallMsgHandler
फंक्शन का उपयोग करके संदेश हैंडलर इंस्टॉल करना है, और फिर, आप QTextStream
का प्रयोग कर एक फाइल करने के लिए डिबग संदेश लिखने के लिए कर सकते हैं।
#include <QtGlobal>
#include <stdio.h>
#include <stdlib.h>
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QByteArray localMsg = msg.toLocal8Bit();
switch (type) {
case QtDebugMsg:
fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtInfoMsg:
fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtWarningMsg:
fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtCriticalMsg:
fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
case QtFatalMsg:
fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
abort();
}
}
int main(int argc, char **argv)
{
qInstallMessageHandler(myMessageOutput); // Install the handler
QApplication app(argc, argv);
...
return app.exec();
}
qInstallMsgHandler
के दस्तावेज़ से लिया (मैं केवल टिप्पणियां जोड़ी):
उपरोक्त उदाहरण में, समारोह myMessageOutput
का उपयोग करता stderr
यहां एक नमूना उदाहरण है जिसे आप किसी अन्य फ़ाइल स्ट्रीम के साथ प्रतिस्थापित करना चाहते हैं, या पूरी तरह से फ़ंक्शन को फिर से लिखना चाहते हैं!
एक बार जब आप इस फ़ंक्शन को लिखते और इंस्टॉल करते हैं, तो आपके सभी qDebug
(साथ ही qWarning
, qCritical
आदि) संदेशों को उस फ़ाइल पर रीडायरेक्ट किया जाएगा जिसे आप हैंडलर में लिख रहे हैं।
अरे, बहुत बहुत धन्यवाद। न केवल मुझे डीबग आउटपुट को फ़ाइल में रीडायरेक्ट करने देगा, यह मुझे टाइमस्टैम्प की तरह अधिक उपयोगी जानकारी प्रिंट करने में सक्षम बनाता है :) – Septagram
@ सप्तग्राम: बिल्कुल। आप हनल्डर में कुछ उपयोगी संदेश जोड़ सकते हैं; और आप 'qDebug',' qWarning', 'qCritical' और इसी तरह के उपयोग के आधार पर विभिन्न फ़ाइलों को अलग-अलग संदेशों को आउटपुट भी कर सकते हैं! – Nawaz
वैसे, कॉलबैक जो वास्तविक आउटपुट करता है - शून्य myMessageOutput (QtMsgType प्रकार, const char * msg) - क्या एन्कोडिंग में यह संदेश प्राप्त होता है? – Septagram