Qt QDebug等重定向到文件中
源地址:http://blog.163.com/soyo_gogogo/blog/static/171414077201392705639321/
Qt的qDebug() 等函数,可以打印出十分细致的log,用过你就会喜欢。现在要将qDebug() 等重定向到文件中。
qInstallMsgHandler
来安装的。这个函数接受的一个函数指针作为参数,函数的定义是
void funName(QtMsgType , const char *)
如笔者的一个小函数:
void messageOutput(QtMsgType, const char *msg)
{
static QMutex mutex;
mutex.lock();
logFile->write(msg);
logFile->write("\n");
logFile->flush();
mutex.unlock();
}
// Install it
qInstallMsgHandler(messageOutput);
logFile是一个全局的QFile类指针。
今天笔者使用Qt5.1版本来编写程序。该函数编译不通过。因为Qt 5.x后,这个函数被
qInstallMessageHandler
替代了。这个函数同样接受一个函数指针作为参数,函数的定义是
void funName(QtMsgType , QMessageLogContext , const QString &)
可见,该函数中多了一个QMessageLogContext参数。这个参数包含了debug的一些基本信息,例如该debug所在的函数,所在的文件,所在的行数等。可以让debug更加详细。
笔者的一段小代码
void MessageOutput(QtMsgType type , const QMessageLogContext &context , const QString &msg)
{
static QMutex mutex;
mutex.lock();
QString log;
switch(type)
{
case QtDebugMsg:
log = QString("Debug: ");
break;
case QtWarningMsg:
log = QString("Error: ");
break;
case QtCriticalMsg:
log = QString("Critical Error: ");
break;
case QtFatalMsg:
log = QString("Fatal Error: ");
abort();
break;
default:
log = QString("Unknow Msg Type : ");
break;
};
log += QTime::currentTime().toString("hh:mm:ss.zzz, File: ") + QString(context.file) ;
log += QString(", Line: " ) + QString::number(context.line) + QString(" : %1\n").arg(msg);
logFile->write(log.toStdString().c_str());
logFile->flush();
mutex.unlock();
}
可以见到在最后面做了一些格式化的东西。这样,debug看起来就是这样的

至于重定向到哪里,就看你的QFile打开的是哪个文件了。
这样处理格式其实还不是那么优雅。像第一个函数那样,没有做任何格式化的操作,因为笔者在另外一个文件中做了格式化。

这个文件被命名为log.h。这样,需要用到QDebug的地方,都可以#include"log.h"。
相信大家都明白了。
Enjoy your Qt.
Qt QDebug等重定向到文件中的更多相关文章
- Linux下执行的java命令重定向到文件中的方法
在Linux下通常会执行如:java -version 的命令, 但是,命令只是打印到了屏幕上不能重定向到文件中或标准输出流中. 此时需要将错误输出流重定向到标准输出流中就可以得到了. 比如:java ...
- [Linux应用]Linux应用程序输出数据重定向到文件中
转自:http://blog.chinaunix.net/uid-20680966-id-4698387.html 目的是要让程序的printf的打印能重定向到某个文本中,ctrl+c强制退出后查看文 ...
- C0301 代码块{}的使用,重定向, 从文件中读取行
#!/bin/bash # 从 /etc/fstab 中读行 File=/etc/fstab { read line1 read line2 } < $File # {}代码块, ...
- Linux 重定向输出到多个文件中
转自:http://codingstandards.iteye.com/blog/833695 用途说明 在执行Linux命令时,我们可以把输出重定向到文件中,比如 ls >a.txt,这时我们 ...
- php 执行结果可以直接重定向文件中
将php中的echo输出到shell上的结果,重定向到文件中. php script.php >result.txt;
- 从键盘或文件中获取标准输入:read命令
文件的描述符和重定向 文件描述符是和文件的输入.输出相关联的非负整数,Linux内核(kernel)利用文件描述符(file descriptor)来访问文件.打开现存文件或新建文件时,内核会返回一个 ...
- 如何将top命令输出重定向为文件
命令: # top -b -n 2 -d 3 > /tmp/top.out 解析: -b: batch 模式,可以重定向到文件中 -n:一共取2次top数据 -d:每次top数据间隔为3秒
- C0302 将一个代码块中的内容保存在文件中, 查看一个rpm包是否可以安装
#!/bin/bash # 这个脚本是用来描述和确认是否可以安装一个rpm包 # 在一个文件中保存输出 SUCCESS=0 E_NOARGS=65 if [ -z "$1" ] t ...
- 《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合
讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...
随机推荐
- 数据结构——表(list)
#include <iostream> #include <list> using namespace std; 标准类的存储方式为双向循环链表 list类 class lis ...
- 如何提高banner设计含量--网上的一篇文章--感悟
"修改": 本质上是改什么?改大小?图片?文字?颜色? 老板说:修改本质上是提高“设计含量”.检测一个作品设计含量的高低,可以将作品中每一个设计元素进行分析,看它的“属性”与“操作 ...
- if语句之求一元二次方程
思路:1.首先明白什么叫做一元二次方程,当a不等于0的时候,此方程是一元二次方程 2.根据公式derta=b*b-4*a*c来判断根的情况 ①derta>0时,方程有两个不相等的实根 ②dert ...
- CSS Filter
支持的效果有: blur(模糊) grayscale(灰度) drop-shadow(阴影) sepia(褐色滤镜) brightness(亮度) contrast(对比) hue-rotate(色相 ...
- 如何去掉IE控件的垂直滚动条(使用QAxWidget加载IE控件)
如果使用MFC的CHtmlView或Qt的QAxWidget加载IE控件,载入html文件后都会自动带一个垂直滚动条,我们不想要这个滚动条,改怎么办呢?搜索了一下“隐藏IE控件滚动条”,发现在 htt ...
- JQuery插件使用小结
JQuery插件使用小结
- Pathchirp—有效的带宽估计方法(二)
上一个blog介绍了有效带宽估计方法:pathload.http://blog.csdn.net/ice110956/article/details/11126491. 做一个小小的总结:pathlo ...
- python模块学习---HTMLParser(解析HTML文档元素)
HTMLParser是Python自带的模块,使用简单,能够很容易的实现HTML文件的分析. 本文主要简单讲一下HTMLParser的用法. 使用时需要定义一个从类HTMLParser继承的类,重定义 ...
- 使用storyboard实现页面跳转,简单的数据传递
由于最近才接触到IOS,苹果已经建议storyboard来搭建所有界面了,于是我 也追随时尚,直接开始使用storyboard.(不料在涉及到页面跳转的时候,遇到的问题是:点击后没有任何反应)众所周知 ...
- pyfits例子
下面是一个读入fits文件,画积分强度图,再把某个星表里的天体画到图上的python程序. ====================================================== ...