В тех случаях, если отладка в среде разработки недоступна, например при создании служб Windows
, приходится писать отладочную информацию в файл. Чтобы сделать это в Qt
и при этом не изобретать велосипед, можно воспользоватся встроенными методами qDebug
, qWarning
, qCritical
, qFatal
.
По умолчанию эти методы выводят сообщения в консоль. Чтобы перенаправить вывод в файл, необходимо воспользоватся методом qInstallMsgHandler()
. Делается это так:
#include <QFile> #include <QDateTime> #include <QDebug> #include <QTextStream> //... int main(int argc, char *argv[]) { QApplication app(argc, argv); qInstallMsgHandler(myMessageOutput); qDebug("Hello World!\n"); MainWindow w; w.show(); return app.exec(); }
Метод myMessageOutput()
определяется следующим образом:
void myMessageOutput(QtMsgType type, const char *msg){ QFile fMessFile(qApp->applicationDirPath() + "/log.txt"); if(!fMessFile.open(QIODevice::Append | QIODevice::Text)){ return; } QString sCurrDateTime = "[" + QDateTime::currentDateTime().toString("dd.MM.yyyy hh:mm:ss.zzz") + "]"; QTextStream tsTextStream(&fMessFile); switch(type){ case QtDebugMsg: tsTextStream << QString("%1 Debug - %2").arg(sCurrDateTime).arg(msg); break; case QtWarningMsg: tsTextStream << QString("%1 Warning - %2").arg(sCurrDateTime).arg(msg); break; case QtCriticalMsg: tsTextStream << QString("%1 Critical - %2").arg(sCurrDateTime).arg(msg); break; case QtFatalMsg: tsTextStream << QString("%1 Fatal - %2").arg(sCurrDateTime).arg(msg); abort(); } tsTextStream.flush(); fMessFile.flush(); fMessFile.close(); }
Удачи!
Комментариев нет:
Отправить комментарий