Qt qInstallMessageHandler()不返回fileline、filename和functionme

Qt qInstallMessageHandler()不返回fileline、filename和functionme,qt,debugging,logging,qt5,Qt,Debugging,Logging,Qt5,我让qInstallMessageHandler()将所有日志提供给外部文件,其中主要有行数错误,因此我可以查看错误的来源: #include <QQmlApplicationEngine> #include <QGuiApplication> #include <QtQml> #include <QCoreApplication> #include <QtCore> #include <QNetworkAccessManager

我让qInstallMessageHandler()将所有日志提供给外部文件,其中主要有行数错误,因此我可以查看错误的来源:

#include <QQmlApplicationEngine>
#include <QGuiApplication>
#include <QtQml>
#include <QCoreApplication>
#include <QtCore>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QtSql>
#include <QtDebug>
#include <QTextStream>
#include "mssql.h"
#include "cryption.h"
#include "led.h"


void myMessageHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    QDateTime datatime = QDateTime::currentDateTime();
    QString formattedDateTime = datatime.toString("dd.MM.yyyy hh:mm:ss");
    QByteArray localMsg = msg.toLocal8Bit();
    const char *file = context.file ? context.file : "";
    const char *function = context.function ? context.function : "";

    QString txt;
    switch (type) {
        case QtDebugMsg:
            txt = QString("%1: Debug: %2, file: %3, line: %4, function: %5").arg(formattedDateTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function);
        break;
        case QtInfoMsg:
            txt = QString("%1: Info: %2, file: %3, line: %4, function: %5").arg(formattedDateTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function);
        break;
        case QtWarningMsg:
            txt = QString("%1: Warning: %2, file: %3, line: %4, function: %5").arg(formattedDateTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function);
        break;
        case QtCriticalMsg:
            txt = QString("%1: Critical: %2, file: %3, line: %4, function: %5").arg(formattedDateTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function);
        break;
        case QtFatalMsg:
            txt = QString("%1: Fatal: %2, file: %3, line: %4, function: %5").arg(formattedDateTime).arg(localMsg.constData()).arg(file).arg(context.line).arg(function);
        break;
    }
    QFile outFile("debug.log");
    outFile.open(QIODevice::WriteOnly | QIODevice::Append | QIODevice::Text);
    QTextStream ts(&outFile);
    ts.setCodec("UTF-8");
    ts << txt << endl;
}

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);

    qInstallMessageHandler(myMessageHandler);

    qmlRegisterType<MSSQL>("MSSQL", 1, 0, "MSSQL");
    qmlRegisterType<LED>("LED", 1, 0, "LED");

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    // Sets path for SQLite
    engine.setOfflineStoragePath(QDir::currentPath());

    return app.exec();
}

有没有什么想法可以让我知道错误是从哪里来的?文件名也是需要的,但如果函数名不可能,我可以不使用它。

如果在调试模式下编译,则不会记录该信息。
如果您将QtCreator用作IDE,则可以使用显示在左下角任务栏中项目按钮的菜单(底部第四个按钮,带有显示图标的按钮)更改生成类型。
如果从命令行使用qmake,请执行“qmake CONFIG+=“debug”。
需要注意的一点是,您正在谈论的调试消息来自qt库本身,因此,如果您以某种标准方式进行操作,您就可以了,但是如果您是手动链接还是使用自定义脚本进行链接,请记住,信息取决于您是链接到qtlibs的“调试”版本还是“发布”版本。QtLibs系列的调试版本的后缀为“d”。

来自:
“注意:默认情况下,此信息仅记录在调试版本中。您可以通过定义QT_MESSAGELOGCONTEXT或QT_NO_MESSAGELOGCONTEXT”
来显式覆盖此信息。
30.06.2020 10:11:03: Debug: Terminal DB Error: No INI File Found!, file: , line: 0, function: 
30.06.2020 10:11:16: Warning: QSqlDatabasePrivate::removeDatabase: connection 'Terminal_DB_External' is still in use, all queries will cease to work., file: , line: 0, function: 
30.06.2020 10:11:16: Warning: QSqlDatabasePrivate::removeDatabase: connection 'ANeT_DB' is still in use, all queries will cease to work., file: , line: 0, function: 
30.06.2020 10:11:16: Warning: QSqlDatabasePrivate::removeDatabase: connection 'Terminal_DB_External' is still in use, all queries will cease to work., file: , line: 0, function: 
30.06.2020 10:11:16: Warning: QSqlDatabasePrivate::removeDatabase: connection 'ANeT_DB' is still in use, all queries will cease to work., file: , line: 0, function: 
30.06.2020 10:11:16: Debug: Terminal DB Error_1: "Driver not loaded Driver not loaded", file: , line: 0, function: