新建项目T33Debug

main.cpp

#include
<QDebug>

#include
<QFile>

#include
<QMutex>  
//文件锁

void
MyMessageHandler(QtMsgType
type,const
QMessageLogContext
&context,const
QString
&msg)

{

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

static
QMutex
mutex;

mutex.lock();

QString
strContext;

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

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

QString
output
=
strContext
+
msg
+
"\r\n";

if(type
==
QtDebugMsg)

{

QFile
file("debug.log");

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

file.write(output.toUtf8());

file.close();

}

if(type
==
QtWarningMsg)

{

QFile
file("warning.log");

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

file.write(output.toUtf8());

file.close();

}

if(type
==
QtCriticalMsg)

{

QFile
file("critical.log");

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

file.write(output.toUtf8());

file.close();

}

if(type
==
QtFatalMsg)

{

QFile
file("fatal.log");

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

file.write(output.toUtf8());

file.close();

}

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

mutex.unlock();

}

int
main()

{

//To
suppress
the
output
at
runtime,
install
your
own
message

//handler
with
qInstallMessageHandler().

qInstallMessageHandler(MyMessageHandler);

qDebug()
<<
"output
debug";

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

qWarning()
<<
"warning";

qCritical()
<<
"cridical";

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

//qFatal("fatal
info");

}

运行结果:

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

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

  1. Qt中与文件目录相关操作

    一.与文件目录操作有关操作. Qt中与文件目录相关的操作在QDir中,需加入#include <QDir>语句. QDir::drives()是列出电脑根目录下的所有目录,返回的是QFil ...

  2. 关于qt中的tr()函数

    关于qt中的tr()函数 在论坛中漂,经常遇到有人遇到tr相关的问题.用tr的有两类人: (1)因为发现中文老出问题,然后搜索,发现很多人用tr,于是他也开始用tr (2)另一类人,确实是出于国际化的 ...

  3. 第4.3节 Python中与迭代相关的函数

    下面要介绍的enumerate.range.zip.reversed.sorted属于Python内置的函数或者类别,返回的对象都可通过迭代方法访问. 一.    enumerate函数 1.     ...

  4. QT中布局器的addStretch函数使用效果

    QBoxLayout中addStretch 函数说明: void QBoxLayout::addStretch(int stretch = 0) Adds a stretchable space (a ...

  5. 关于Qt中使用线程的时候函数具体在哪个线程中运行的问题

    在子线程中,run函数中以及其中调用的都在单独的子线程里面运行,但是其他的类似构造函数之流都是在主线程里面运行的,不要搞混了

  6. 5.QT中关于HTTPClient相关的操作,Json数据传输

     新建项目T12HttpClient T12HttpClient.pro SOURCES += \ main.cpp QT += network CONFIG += C++11 main.cpp ...

  7. PyQt学习随笔:Qt中Model/View相关的主要类及继承关系

    View相关类类继承关系: Model相关类类继承关系:

  8. C#中Byte转换相关的函数

    1.将一个对象转换为byte对象 public static byte GetByte(object o) { ; if (o != null) { byte tmp; if (byte.TryPar ...

  9. 关于QT中evaluateJavaScript()函数返回值的处理问题

    关于QT中evaluateJavaScript()函数返回值的处理问题 - 寒风问雪的专栏 - 博客频道 - CSDN.NET 关于QT中evaluateJavaScript()函数返回值的处理问题 ...

随机推荐

  1. 【bzoj4567 scoi2016】 背单词

    题目描述 Lweb 面对如山的英语单词,陷入了深深的沉思,”我怎么样才能快点学完,然后去玩三国杀呢?“.这时候睿智的凤老师从远处飘来,他送给了 Lweb 一本计划册和一大缸泡椒,他的计划册是长这样的: ...

  2. bzoj 1217: [HNOI2003]消防局的设立

    Description 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地,并且每两个基地都能够通过道路到达,所以所有的基地形成了 ...

  3. bzoj3173[Tjoi2013]最长上升子序列 平衡树+lis

    3173: [Tjoi2013]最长上升子序列 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2253  Solved: 1136[Submit][S ...

  4. scrapy常用命令(持续) | Commonly used Scrapy command list (con't)

    以下命令都是在CMD中运行,首先把路径定位到项目文件夹 ------------------------------------------------------------------------ ...

  5. SQL 收缩数据库日志的几种办法 (2005与2008 略有区别)

    在SQL Server 2000/2005中可以快速压缩日志log文件,通过SQL, 方法一: ---DBTEST 为数据库名,顺序最好别乱.注意:要先截断再清空,最后收缩! backup log D ...

  6. 单选、多选框根据value值设置选中

    $("input:checkbox[value='video']").parent().addClass('checked'); $("input:radio[value ...

  7. python实现购物车

    一. 功能: 1. 用户充值余额 判断余额输入格式是否正确,正确则转换成float型. 2. 显示商品列表 根据已有商品显示所有商品的序号.商品名称.和价格供用户选择 3. 用户选择商品 判断用户输入 ...

  8. Vue实践经验

    多考虑应变 如果模版中绑定了 obj.xx 时,需要注意 obj 是否是异步数据,默认值是否为 null.安全起见,可在组件最外层加 v-if 判断. <template> <div ...

  9. HTML标签部分(块级/行级)

    一.基本块级标签 1.HTML标签的分类:      a.块级标签:显示为块状,独占一行,自动换行.      b.行级标签:在一行中,从左往右依次排列,不会自动换行. 2.h标签(标题标签) h标签 ...

  10. Numpy函数学习--genfromtxt函数

    genfromtxt函数 今天学习时遇到了genfromtxt函数 world_alcohol = numpy.genfromtxt("world_alcohol.txt",del ...