Qt支持自定义消息处理函数。通过qInstallMessageHandler
方法可以安装自定义消息处理函数。该方法的返回值是一个指向之前消息处理函数的指针。Qt 库(调试模式)包含数百条警告信息,当出现内部错误(通常是函数参数无效)时,就会打印这些信息。除非在编译过程中设置了 QT_NO_WARNING_OUTPUT 或QT_NO_DEBUG_OUTPUT,否则以 release 模式构建的 Qt 也会包含此类警告信息。只能定义一个消息处理程序,因为这通常是为了控制整个应用程序的调试输出。
要恢复消息处理程序,可以调用 qInstallMessageHandler(0)。
例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 void messageHandler (QtMsgType type, const QMessageLogContext &context, const QString &msg) { QDateTime currentDateTime = QDateTime::currentDateTime (); QFile logFile ("log.log" ) ; logFile.open (QIODevice::WriteOnly | QIODevice::Append); QTextStream out (&logFile) ; out << currentDateTime.toString ("yyyy-MM-dd hh:mm:ss" ) << " " ; switch (type) { case QtDebugMsg: out << "[DEBUG] " ; break ; case QtInfoMsg: out << "[INFO] " ; break ; case QtWarningMsg: out << "[WARNING] " ; break ; case QtCriticalMsg: out << "[CRITICAL] " ; break ; case QtFatalMsg: out << "[FATAL] " ; break ; } out << msg << " (" << context.file << ":" << context.line << ", " << context.function << ")" << endl; logFile.close (); } int main (int argc, char **argv) { qInstallMessageHandler (messageHandler); QApplication app (argc, argv) ; ... return app.exec (); }