来源:http://blog.sina.com.cn/s/blog_a6fb6cc90101guz0.html

继上节所讲,Qt可以很容易的将一些日志信息保存到文件中,那么日志信息如何输出到窗口呢?

  用过VS或者其他IDE的童鞋对日志输出到窗口应该都很熟悉,开发者可以打开一个输出窗口很清晰的查看一些日志信息。
 
例如VS,如下:
 
代码如下:
**********log_browser.cpp**********
 
#include "log_browser.h"
 
LogBrowser::LogBrowser(QWidget *parent)
: QWidget(parent)
{
this->resize(400, 300);
is_finished = false;
 
browser = new QTextBrowser();
start_button = new QPushButton();
clear_button = new QPushButton();
 
start_button->setText("start");
clear_button->setText("clear");
 
QHBoxLayout *button_layout = new QHBoxLayout();
button_layout->addStretch();
button_layout->addWidget(start_button);
button_layout->addWidget(clear_button);
button_layout->setSpacing(10);
button_layout->setContentsMargins(0, 0, 10, 10);
 
QVBoxLayout *main_layout = new QVBoxLayout();
main_layout->addWidget(browser);
main_layout->addLayout(button_layout);
main_layout->setSpacing(10);
main_layout->setContentsMargins(0, 0, 0, 0);
 
this->setLayout(main_layout);
connect(start_button, &QPushButton::clicked, this, &LogBrowser::start);
connect(clear_button, &QPushButton::clicked, browser, &QTextBrowser::clear);
}
 
LogBrowser::~LogBrowser()
{
 
}
 
void LogBrowser::outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
QString message;
switch(type)
{
case QtDebugMsg:
message = QString("Debug:");
break;
 
case QtWarningMsg:
message = QString("Warning:");
break;
 
case QtCriticalMsg:
message = QString("Critical:");
break;
 
case QtFatalMsg:
message = QString("Fatal:");
}
 
browser->append(message.append(msg));
}
 
void LogBrowser::start()
{
if(!is_finished)
{
for(int i=0; i<1000000; i++)
{
QCoreApplication::processEvents();
qDebug()<<QString("This is a Qt log browser").append(QString::number(i, 10));
}
is_finished = true;
}
}
 
void LogBrowser::closeEvent(QCloseEvent *event)
{
QMessageBox::StandardButton answer = QMessageBox::question(
this,
tr("Close Log Browser?"),
tr("Do you really want to close the log browser?"),
QMessageBox::Yes | QMessageBox::No
);
if (answer == QMessageBox::Yes)
event->accept();
else
event->ignore();
}
 
void LogBrowser::keyPressEvent(QKeyEvent *event)
{
event->ignore();
}
 
**********main.cpp**********
 
#include "log_browser.h"
#include
#include
 
QPointer log_broswer;
 
void outputMessage(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
if(log_broswer)
log_broswer->outputMessage(type, context, msg);
}
 
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
log_broswer = new LogBrowser();
log_broswer->show();
qInstallMessageHandler(outputMessage);
 
return a.exec();
}
 
效果如下:
 
注:
  技术在于交流、沟通,转载请注明出处并保持作品的完整性。

Qt之日志输出窗口的更多相关文章

  1. Qt之日志输出文件

    在Qt开发过程当中经常使用qDebug等一些输出来调试程序,但是到了正式发布的时候,都会被注释或者删除,采用日志输出来代替.     做过项目的童鞋可能都使用过日志功能,以便有异常错误能够快速跟踪.定 ...

  2. 解决Qt Creator编译输出窗口乱码的问题

    设置环境变量LC_ALL为en_US. 附注:将乱码复制到文本编辑器(如Notepad++)后将编码设置为utf-8,可以看到正确的文字. 看样子是编译输出窗口的编码设置出了问题,或者是gcc的输出编 ...

  3. Qt编写调试日志输出类带网络转发(开源)

    用qt开发商业程序已经九年了,陆陆续续开发过至少几十个程序,除了一些算不算项目的小工具外,大部分的程序都需要有个日志的输出功能,希望可以将程序的运行状态存储到文本文件或者数据库或者做其他处理等,qt对 ...

  4. Qt 日志输出文件

    在Qt开发过程当中经常使用qDebug等一些输出来调试程序,但是到了正式发布的时候,都会被注释或者删除,采用日志输出来代替.     做过项目的童鞋可能都使用过日志功能,以便有异常错误能够快速跟踪.定 ...

  5. EF Core如何输出日志到Visual Studio的输出窗口

    我们在使用EF Core的时候,很多时候需要在Visual Studio的输出窗口中知道EF Core在后台生成的SQL语句是什么,这个需求可以通过自定义EF Core的ILoggerFactory和 ...

  6. Qt 日志输出

    Qt学习(3)日志输出 普通的打印输出 用 QtCreator 开发 Qt 程序时, 经常需要向控制台打印一些参数.有时候是查看对象的属性是否被正确设置,有时候是查看程序是否执行了某一段代码,或者执行 ...

  7. VS IDE调试下将打印日志输出到输出窗口

    int aBeginTime = GetTickCount(); TRACE("Current time begin:%d \n", aBeginTime); 查看输出窗口:

  8. ASP.NET Core 2.1 : 十二.内置日志、使用Nlog将日志输出到文件

    应用离不开日志,虽然现在使用VS有强大的调试功能,开发过程中不复杂的情况懒得输出日志了(想起print和echo的有木有),但在一些复杂的过程中以及应用日常运行中的日志还是非常有用. ASP.NET ...

  9. logback配置日志输出

    <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> & ...

随机推荐

  1. 在 Sublime Text 3 中快捷打开 git-gui

    在文件夹右键菜单上可以方便的打开 git-gui,在 st 里面也可以添加这个右键菜单. 步骤如下: 安装 SideBarEnhancements 插件. 在 SideBarEnhancements ...

  2. 为什么使用 SLF4J 而不是 Log4J 来做 Java 日志

    转自:为什么使用 SLF4J 而不是 Log4J 来做 Java 日志 英文原文:Why use SLF4J over Log4J for logging in Java 每个Java开发人员都知道日 ...

  3. jQuery第四章

    jQuery中的事件和动画 一.jQuery中的事件 1.加载DOM (1)执行时机 $(document).ready()方法和window.onload方法有相似的功能,但是在执行时机方面是有区别 ...

  4. LINUX nfs服务

    1.什么是NFS(Network FileSystem)  NFS 就是 Network FileSystem 的缩写,最早之前是由 Sun 所发展出来的.他最大的功能就是可以透过网络,让不同的机器. ...

  5. 浙大pat1019题解

    1019. General Palindromic Number (20) 时间限制 400 ms 内存限制 32000 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN ...

  6. 二维离散平稳小波分解swt2

    对信号X进行N尺度平稳小波分解 [A,H,V,D]=swt2(X,N,'wname'); clc,clear all,close all; load woman; [cA,cH,cV,cD]=swt2 ...

  7. 翻扣告诉你外出旅游时实用的一些小tips

    很多人出行都会带着大包小包,东西胡乱塞成一团,导致每次要用的时候都翻个遍.所以今天游游君为大家推荐几个出门旅行的小技巧. 收拾行李时,把鞋子放进浴帽里.浴帽很容易洗干净,还可以防止鞋子把干净的衣服弄脏 ...

  8. yum安装memcache,mongo扩展以及python的mysql模块安装

    //启动memcached/usr/local/memcached/bin/memcached -d -c 10240 -m 1024 -p 11211 -u root/usr/local/memca ...

  9. 使用某些Widows API时,明明包含了该头文件,却报错“error C2065: undeclared identifier”

    在使用一些新版本的API,或者控件的新特性(比如新版的ComCtl32.dll)的时候,你可能会得到“error C2065: undeclared identifier.“这个错误.原因是这些功能是 ...

  10. android 动态string

    android开发过程之中,动态的插入string内容时候使用, 例如, <string name="time">当前时间:<xliff:g id="p ...