2013-11-21 103 views
-1

我試圖通過使用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(); 
} 

但是編譯我收到以下錯誤後:這裏

error: invalid conversion from 'void ()(QtMsgType, const char)' to 'QtMessageHandler {aka void (*)(QtMsgType, const QMessageLogContext&, const QString&)}' [-fpermissive]

任何人誰早些時候曾面臨同樣的問題?

+1

檢查消息處理程序想要的參數列表。它不符合你的功能(如果你不想閱讀參考資料,錯誤信息告訴你*正確的*想要的東西)。 –

+1

[查看文檔](http://qt-project.org/doc/qt-5.0/qtcore/qtglobal.html#qInstallMessageHandler)。 – thuga

回答

2

它看起來像你切換到Qt5並使用Qt4.x中定義的消息處理函數簽名。需要聲明的消息處理程序如下:

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

代替。

+0

我輸入了,但沒有使用它,但它顯示錯誤爲:錯誤:初始化'void(* qInstallMessageHandler(QtMessageHandler))(QtMsgType,const QMessageLogContext&,const QString&)的參數1'[-fpermissive] – CowboY

+0

我可以'由於我是Qt編程的新手,因此不會發現錯誤。 – CowboY

+0

感謝哥們,這是一個愚蠢的錯誤第三個參數需要是const QString&味精。 – CowboY