重定向qDebug、qWarning等到某个Qt窗口部件
来源:互联网 发布:kali linux卸载输入法 编辑:程序博客网 时间:2024/06/05 18:46
起源
看到 QtDev wiki 中有一篇文章QDebug 输出的浏览窗口。实现了将qDebug、qWarning等输出显示到一个窗口部件(QTextBrowser)中。
看完后,个人似乎对这堆代码不太感冒,于是自己试着写写,有了下面的代码:
实现了什么?
定义了一个 MsgHandlerWapper 的类
- qDebug、qWarning 等的输出会通过该类的 message 信号发送出来
- 如果想让某个窗口接收消息,只需要定义一个槽,然后连接到该信号。
使用举例
如果要使用一个QPlainTextEdit作为log窗口,你只需要
- 简单定义一个槽
connect到MsgHandlerWapper实例的信号即可
#include <QPlainTextEdit>#include "msghandlerwapper.h"class TextEdit:public QPlainTextEdit{ Q_OBJECTpublic: explicit TextEdit(QWidget * parent = 0) :QPlainTextEdit(parent) { connect(MsgHandlerWapper::instance(), SIGNAL(message(QtMsgType,QString)), SLOT(outputMessage(QtMsgType,QString))); }public slots: void outputMessage(QtMsgType type, const QString &msg) { appendPlainText(msg); }};
代码
- msghandlerwapper.h
/* (C) 2011 dbzhang800#gmail.com*/#ifndef MSGHANDLERWAPPER_H#define MSGHANDLERWAPPER_H#include <QtCore/QObject>class MsgHandlerWapper:public QObject{ Q_OBJECTpublic: static MsgHandlerWapper * instance();signals: void message(QtMsgType type, const QString &msg);private: MsgHandlerWapper(); static MsgHandlerWapper * m_instance;};#endif // MSGHANDLERWAPPER_Hs
- msghandlerwapper.cpp
/* (C) 2011 dbzhang800#gmail.com*/#include "msgwapper.h"#include <QtCore/QMetaType>#include <QtCore/QMutex>#include <QtCore/QMutexLocker>#include <QtCore/QCoreApplication>void static msgHandlerFunction(QtMsgType type, const char *msg){ QMetaObject::invokeMethod(MsgHandlerWapper::instance(), "message" , Q_ARG(QtMsgType, type) , Q_ARG(QString, QString::fromLocal8Bit(msg)));}MsgHandlerWapper * MsgHandlerWapper::m_instance = 0;MsgHandlerWapper * MsgHandlerWapper::instance(){ static QMutex mutex; if (!m_instance) { QMutexLocker locker(&mutex); if (!m_instance) m_instance = new MsgHandlerWapper; } return m_instance;}MsgHandlerWapper::MsgHandlerWapper() :QObject(qApp){ qRegisterMetaType<QtMsgType>("QtMsgType"); qInstallMsgHandler(msgHandlerFunction);}
参考
http://developer.qt.nokia.com/wiki/Browser_for_QDebug_output
http://blog.csdn.net/dbzhang800/article/details/6449874
- 重定向qDebug、qWarning等到某个Qt窗口部件
- 屏蔽Qt的qWarning() qDebug()语句输出
- qDebug 输出重定向
- qDebug重定向
- Qt:重定向QDebug输出到文件,并附上日期
- Qt:重定向QDebug输出到文件,并附上日期
- 实现Qt日志功能并输出到文件(qDebug\qWarning\ qCritical\qFatal)
- 实现Qt日志功能并输出到文件(qDebug\qWarning\ qCritical\qFatal)
- 实现Qt日志功能并输出到文件(qDebug\qWarning\ qCritical\qFatal)
- Qt窗口部件
- 自定义Qt窗口部件
- Qt窗口部件
- Qt自定义窗口部件
- Qt自定义窗口部件
- Qt窗口部件
- Qt之窗口部件
- Qt中的窗口部件
- Qt自定义窗口部件
- VC Console(控制台)程序如何隐藏CMD窗口
- android API 版本升级差异归纳
- [iOS开发必备工具之]UITableView下拉刷新效果
- 中国SNS网站盈利模式浅析及探讨
- java socket通信代码3
- 重定向qDebug、qWarning等到某个Qt窗口部件
- TCP IP 详解 1: 笔记 icmp ping traceout
- AS3.0自定义事件
- C++primer读书笔记(第六,七章)
- 顺序表的一些问题
- java socket 通信 代码2-multiServer.java
- VC实现EXCEL转换为CSV格式
- 系统架构之三(业务运营支撑系统)
- 基于UDP聊天室程序