安装消息处理程序

时间:2013-11-21 07:35:00

标签: c++ qt logging

我尝试使用qinstallMessageHandler()函数安装消息处理程序,为应用程序创建日志文件。我的计划如下:

#include <QCoreApplication>
#include <QtDebug>
#include <QDir>
#include <fstream>
#include <iostream>
#include <QtCore>
#include <stdio.h>
#include <stdlib.h>

FILE *fd;

void myMessageOutput(QtMsgType type, const char *msg)
{
    QString timeStamp = QTime::currentTime().toString("hh:mm:ss:zzz");
    switch (type) {
    case QtDebugMsg:
        fprintf(fd, "[%s]", timeStamp.toStdString().c_str());
        fprintf(fd, "[Debug] %s\n", msg);
        break;
    case QtWarningMsg:
        fprintf(fd, "[%s]", timeStamp.toStdString().c_str());
        fprintf(fd, "[Warning] %s\n", msg);
        break;
    case QtCriticalMsg:
        fprintf(fd, "[%s]", timeStamp.toStdString().c_str());
        fprintf(fd, "[Critical] %s\n", msg);
        break;
    case QtFatalMsg:
        fprintf(fd, "[%s]", timeStamp.toStdString().c_str());
        fprintf(fd, "[Fatal] %s\n", msg);
        abort();
    }
}

int main(int argc, char *argv[])
{
    fd = fopen("log.txt", "a");
    qInstallMessageHandler(myMessageOutput);

    QCoreApplication a(argc, argv);



    qDebug()<<"\t Hello World!!! \n";

    return a.exec();
}

但是在编译之后我得到以下错误:

  

错误:无效转换为'void()(QtMsgType,const char )'到'QtMessageHandler {aka void(*)(QtMsgType,const QMessageLogContext&amp;,const QString&amp;)}'[ - fpermissive]

此处有人早些时候遇到过同样的问题吗?

1 个答案:

答案 0 :(得分:2)

看起来你切换到Qt5并使用了Qt4.x中定义的消息处理函数签名。您需要按如下方式声明消息处理程序:

void myMessageOutput(QtMsgType type,
                     const QMessageLogContext &context,
                     const QString &msg)
{
    [..]
}

代替。