Bạn phải cài đặt một trình xử lý thông báo bằng qInstallMsgHandler
hàm và sau đó, bạn có thể sử dụng QTextStream
để ghi thông báo gỡ lỗi vào một tệp. Đây là một ví dụ mẫu:
#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);
QApplication app(argc, argv);
...
return app.exec();
}
Lấy từ tài liệu của qInstallMsgHandler
(tôi chỉ thêm các nhận xét):
Trong ví dụ trên, hàm myMessageOutput
sử dụng stderr
mà bạn có thể muốn thay thế bằng một số dòng tệp khác hoặc viết lại hoàn toàn hàm!
Khi bạn viết và cài đặt chức năng này, tất cả thư qDebug
(cũng như qWarning
, qCritical
v.v.) của bạn sẽ được chuyển hướng đến tệp bạn đang viết trong trình xử lý.