新建项目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. ●BZOJ 2588 Spoj 10628. Count on a tree

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2588 题解: 主席树,在线,(求LCA)感觉主席树真的好厉害...在原树上建主席树.即对于原 ...

  2. 2015 多校联赛 ——HDU5334(构造)

    Virtual Participation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Ot ...

  3. 【Remmarguts' Date】

    一道来自POJ2449的题,它融合了单源点最短路算法.启发式搜索,让我们对“启发式”有更深的理解和体会.Wow! ·英文题,述大意:       读入n,m(n<=1000,m<=1000 ...

  4. [BZOJ]1005 明明的烦恼(HNOI2008)

    BZOJ的第一页果然还是很多裸题啊,小C陆续划水屯些板子. Description 自从明明学了树的结构,就对奇怪的树产生了兴趣......给出标号为1到N的点,以及某些点最终的度数,允许在任意两点间 ...

  5. bzoj4596[Shoi2016]黑暗前的幻想乡 Matrix定理+容斥原理

    4596: [Shoi2016]黑暗前的幻想乡 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 464  Solved: 264[Submit][Sta ...

  6. 解读Raft(一 算法基础)

    最近工作中讨论到了Raft协议相关的一些问题,正好之前读过多次Raft协议的那paper,所以趁着讨论做一次总结整理. 我会将Raft协议拆成四个部分去总结: 算法基础 选举和日志复制 安全性 节点变 ...

  7. 如何理解Spring IOC

    Spring IOC 思维导图 要了解控制反转( Inversion of Control ), 我觉得有必要先了解软件设计的一个重要思想:依赖倒置原则(Dependency Inversion Pr ...

  8. Angular 和 Vue 使用的对比总结 -- 脚手架

    前言 之前是用Vue的,现在由于工作原因,开始使用Angular.分别是Vue2和Angular5入的坑.只是从使用上来对比总结,加深记忆,避免混淆. 什么 ?  你问实现原理的异同及优劣? 本宝宝还 ...

  9. 光电转研发:和计算机没有一点关系的专业怎么去bat类的公司

    光电 女 其实编码能力一般般,拿到百度腾讯研发offer. 一来幸运,二来真的想说行动决定了结果.研一没事就出去家教充实自己赚点钱,研二就开始找实习,去了网易,海康威视,百度实习.感觉还是吃了不少苦的 ...

  10. kibana使用

    最近,被老大叫写一个kibana的使用方法给所有人用. 注意的一点: 能不用空格表示OR或者AND就不用空格表示,因为要么全用要么全部不用,否则会因为解析搜索同级的时候,若出现空格和OR,会冲突覆盖意 ...