来源: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. hdu1020

    #include <stdio.h> int main(void){ int n,i,c; char txt[10001]; scanf("%d", &n); ...

  2. PHP学习过程_Symfony_(1)

    从今天开始学习php,感兴趣的同学欢迎一块讨论学习,QQ群新群182983780; 1:配置环境变量 把这php和php5http://pan.baidu.com/s/1pKDq9tT两个文件同时c盘 ...

  3. mysqldump 数据库备份命令及脚本

    mysql -uroot -phowhy@123 -e 'show databases;' | grep -ivE 'waring|database|mysql'|sed -r "s#^(. ...

  4. 《JS权威指南学习总结--7.8 数组方法》

    内容要点: 一.join() Array.join()方法将数组中所有元素都转化为字符串并连接在一起,返回最后生产的字符串. 可以指定一个可选的字符串在生产的字符串中来分隔数组的各个元素.如果不指定分 ...

  5. <hr/>标签改变颜色注意事项

    1.css改变颜色 <hr style="border:0;background-color:#093;height:1px;">   注意: 如果不加border:0 ...

  6. Python处理Excel(转载)

    1. Python 操作 Excel 的函数库 我主要尝试了 3 种读写 Excel 的方法: 1> xlrd, xlwt, xlutils: 这三个库的好处是不需要其它支持,在任何操作系统上都 ...

  7. LeetCode OJ 289. Game of Life

    According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellul ...

  8. DigitalOcean VPS简介

    DigitalOcean是一家位于美国的云主机服务商,总部位于美国纽约,成立于2012年.由于价格低廉,高性能配置.灵活布置的优势,近些年来发展迅猛,成为中国站长圈们喜爱的品牌.(访问http://w ...

  9. xampp 搭建 web mac上

    1.安装 2.修改数据库密码,删除phpmyadmin  ,用navicat 控制数据库 3.修改/Applications/XAMPP/xamppfiles/etc/extra/httpd-vhos ...

  10. java虚拟机存储区

    方法区和堆区是数据共享区. 栈区:数据不共享.方法参数.局部变量.参与运算的中间结果.返回值等等都在栈区中. 堆区:数据共享.存放对象. 方法区存放类型信息,类型信息包括:字段信息.方法信息.该类型的 ...