首页 > 代码库 > 3.QT中的debug相关的函数,以及文件锁的使用

3.QT中的debug相关的函数,以及文件锁的使用



1 新建项目T33Debug

main.cpp

#include<QDebug>

#include<QFile>

#include<QMutex>  //文件锁

 

voidMyMessageHandler(QtMsgTypetype,constQMessageLogContext&context,constQString&msg)

{

   //使用一个文件锁,当在写文件的时候,要等写完之后才能继续执行

   staticQMutexmutex;

   mutex.lock();

 

   QStringstrContext;

   //QMessageLogContext中保存的有文件名,文件行号,方法等信息

   strContext.sprintf("%s%d%s:\r\n\t",context.file,context.line,context.function);

 

   QStringoutput=strContext+msg+"\r\n";

 

   if(type==QtDebugMsg)

   {

       QFilefile("debug.log");

       file.open(QFile::WriteOnly|QFile::Append);

       file.write(output.toUtf8());

       file.close();

   }

   if(type==QtWarningMsg)

   {

       QFilefile("warning.log");

       file.open(QFile::WriteOnly|QFile::Append);

       file.write(output.toUtf8());

       file.close();

   }

   if(type==QtCriticalMsg)

   {

       QFilefile("critical.log");

       file.open(QFile::WriteOnly|QFile::Append);

       file.write(output.toUtf8());

       file.close();

   }

   if(type==QtFatalMsg)

   {

       QFilefile("fatal.log");

       file.open(QFile::WriteOnly|QFile::Append);

       file.write(output.toUtf8());

       file.close();

   }

 

   printf("%s",output.toUtf8().data());

   mutex.unlock();

}

 

intmain()

{

   //Tosuppresstheoutputatruntime,installyourownmessage

   //handlerwithqInstallMessageHandler().

   qInstallMessageHandler(MyMessageHandler);

   qDebug()<<"outputdebug";

   qDebug("%s,%d","outputdebug",1);

 

   qWarning()<<"warning";

   qCritical()<<"cridical";

   //可以放开下面的一句,然后发现目录也有相应的fatal.log文件

   //qFatal("fatalinfo");

}

运行结果:

输入目录(E:\QT\build-T33Debug-Desktop_Qt_5_3_MinGW_32bit-Debug)的文件如下:

 

3.QT中的debug相关的函数,以及文件锁的使用