新建项目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. hdu 5392

    Sample Input 2 3 1 3 2 6 2 3 4 5 6 1   Sample Output 2 6 题意:给一个转置求它的循环长度 题解:分解成循环求最小公倍数 #include< ...

  2. 【bzoj4568 scoi2016】幸运数字

    题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征. 一些旅行者希望 ...

  3. 毕业设计-JSP论文盲审系统

    之前做的一款jsp的论文盲审系统,ssh框架的,学生提交论文,系统管理员将论文分配给教员,教员在不知学员是谁的情况之下,对论文进行打分,然后提交给系统,最后系统发布成绩,供学员查看. 整体做的还不错, ...

  4. Gradle学习之构建java与web项目

    一.使用Gradle的java插件构建Java项目 1)Gradle插件包含了若干个接口定义和已有的任务项,语法结构:apply plugin:'插件名' ,此处我们定义插件 apply plugin ...

  5. VLAN的划分

    VLAN划分是指逻辑上把网络资源和网络用户按照一定的原则进行划分,把一个物理上实际的网络划分成多个小的逻辑网络.设计VLAN的最初目的是隔离局域网的广播,不让它去影响网络带宽.VLAN与传统的LAN相 ...

  6. Fabrik – 在浏览器中协作构建,可视化,设计神经网络

    Fabrik是一个在线协作平台,通过简单的拖放界面来构建,可视化和训练深度学习模型. 它允许研究人员使用Web GUI协同开发和调试模型,该GUI支持导入,编辑和导出广泛流行的框架(如Caffe,Ke ...

  7. 背景重复样式background-repeat

    一.background-repeat属性 在CSS中,使用background-repeat属性可以设置背景图像是否平铺,并且可以设置如何平铺. 语法: background-repeat:取值; ...

  8. application-config.xml和mvc-config.xml的区别

    头一个放bean之类的东西 后一个放controllers, view resolvers之类的东西

  9. axios的兼容性处理

    一.简介 看看官网的简介: "Promise based HTTP client for the browser and node.js" 译:基于 Promise 的 HTTP ...

  10. ubuntu + 远程桌面连接命令 + rdesktop + 连接windows或者ubuntu远程桌面

    原文 https://www.cnblogs.com/xiaouisme/p/5166469.html sudo apt-get install rdesktop rdesktop 124.42.12 ...