【问题标题】:Installing message handler安装消息处理程序
【发布时间】:2013-11-21 07:34:59
【问题描述】:

我尝试通过使用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&, const QString&)}'的无效转换 [-fpermissive]

这里有人遇到过同样的问题吗?

【问题讨论】:

  • 检查消息处理程序所需的参数列表。它与您的功能不匹配(如果您不想阅读参考资料,错误消息会准确地告诉您想要什么)。

标签: c++ qt logging


【解决方案1】:

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

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

改为。

【讨论】:

  • 我也输入了但没有使用它,但它显示错误为:错误:初始化参数 1 of 'void (* qInstallMessageHandler(QtMessageHandler))(QtMsgType, const QMessageLogContext&, const QString&)' [ -fpermissive]
  • 谢谢哥们,这是一个愚蠢的错误,第三个参数必须是 const QString &msg。
猜你喜欢
  • 1970-01-01
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多