我有以下代碼取自https://doc.qt.io/qt-5/qtglobal.html#qInstallMessageHandler 我想訪問 myMessageOutput() 中的 context.file、context.line、context.function
void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QByteArray localMsg = msg.toLocal8Bit();
const char *file = context.file ? context.file : "";
const char *function = context.function ? context.function : "";
switch (type) {
case QtDebugMsg:
fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtInfoMsg:
fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtWarningMsg:
fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtCriticalMsg:
fprintf(stderr, "Critical: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
case QtFatalMsg:
fprintf(stderr, "Fatal: %s (%s:%u, %s)\n", localMsg.constData(), file, context.line, function);
break;
}
}
int main(int argc, char **argv)
{
qInstallMessageHandler(myMessageOutput);
QApplication app(argc, argv);
...
return app.exec();
}
在除錯構建中(使用 `qDebug() << "test logging")顯示有關 context.line/file/number 的詳細資訊。在發布版本中,資訊為 nullptr 或 0(行)。轉載于 Windows (QT 5.12)
uj5u.com熱心網友回復:
我已經使用 gcc(在 Linux 中)在 Qt 5.15.2 中測驗了您的代碼,它在除錯和發布模式下都可以作業,但我無法重現您的問題。但是在檔案頁面QMessageLogContext 類中提到:
注意:默認情況下,此資訊僅記錄在除錯版本中。您可以通過定義 QT_MESSAGELOGCONTEXT 或 QT_NO_MESSAGELOGCONTEXT 來明確地覆寫它。
因此,將以下行添加到您的 project.pro 檔案可能會解決您的問題:
DEFINES = QT_MESSAGELOGCONTEXT
不要忘記運行 qmake 并重建您的專案以查看效果。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/313884.html
標籤:qt
上一篇:如何翻譯快捷鍵
