Qt中利用QTextBrowser控件设计日志窗口

2024-06-21 06:36

本文主要是介绍Qt中利用QTextBrowser控件设计日志窗口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们一般使用Qt开发应用程序时,都有将控制台窗口去掉。但是,有时候又需要查看一些调试信息,一般的处理方式是把log写到一个文件中。本文介绍一下日志窗口,可以更方便的查看日志信息。

UI设计

推拽UI控件,修改默认背景。
请添加图片描述

日志打印接口

目前仅支持三种操作,可根据需要扩展。

/** 文档操作方式*/
enum
{ADD_TYPE_NOLINE = 0,        // 不换行ADD_TYPE_LINE,              // 换行ADD_TYPE_REPLACE_LINE,      // 替换当前行
};void ShowLogDlg::AppendLogMessage(const QString& msg, const QString& color, uint16_t optType)
{// 格式化当前时间QDateTime dt = QDateTime::currentDateTime();QString strTime = dt.toString("yyyyMMdd HHmmss.zzz");QString ts = QString("<font color='gray'>[%1] </font>").arg(strTime);QString coloredMessage = QString("<font color='%1'>%2</font>").arg(color).arg(msg);switch (optType){case ADD_TYPE_NOLINE:{ui.browserLogText->moveCursor(QTextCursor::End);ui.browserLogText->insertHtml(coloredMessage);}break;case ADD_TYPE_LINE:{ui.browserLogText->append(ts + coloredMessage);}break;case ADD_TYPE_REPLACE_LINE:{// 获取当前的QTextCursor  QTextCursor cursor = ui.browserLogText->textCursor();// 检查是否有选中的文本或光标是否在有效位置  if (!cursor.hasSelection() && cursor.position() != -1) {// 定位到当前行的开始  cursor.movePosition(QTextCursor::StartOfLine);// 保存当前行的开始位置  int start = cursor.position();// 定位到当前行的结束(下一行的开始或文档末尾)  cursor.movePosition(QTextCursor::EndOfLine, QTextCursor::KeepAnchor);// 删除当前行  cursor.removeSelectedText();// 将修改后的cursor设置回QTextBrowser  ui.browserLogText->setTextCursor(cursor);// 设置新的行文本ui.browserLogText->insertHtml(ts + coloredMessage);}}break;default:break;}// Scroll to the end.QScrollBar* verticalScrollBar = ui.browserLogText->verticalScrollBar();verticalScrollBar->setValue(verticalScrollBar->maximum());
}

调试代码

窗口显示时,模拟文件下载进度。

void ShowLogDlg::showEvent(QShowEvent* event)
{AppendLogMessage(QStringLiteral("开始下载文件"), "white", ADD_TYPE_LINE);AppendLogMessage(QStringLiteral("当前进度:......0%"), "white", ADD_TYPE_LINE);std::thread td([this]() {for (int i = 1; i <= 100; i++){sleep(100);AppendLogMessage(QStringLiteral("当前进度:. . . . . . %1%").arg(i), "white", ADD_TYPE_REPLACE_LINE);}AppendLogMessage(QStringLiteral("下载完成"), "green", ADD_TYPE_LINE);});td.detach();__super::showEvent(event);
}

运行效果

请添加图片描述

这篇关于Qt中利用QTextBrowser控件设计日志窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1080469

相关文章

SpringBoot日志级别与日志分组详解

《SpringBoot日志级别与日志分组详解》文章介绍了日志级别(ALL至OFF)及其作用,说明SpringBoot默认日志级别为INFO,可通过application.properties调整全局或... 目录日志级别1、级别内容2、调整日志级别调整默认日志级别调整指定类的日志级别项目开发过程中,利用日志

QT Creator配置Kit的实现示例

《QTCreator配置Kit的实现示例》本文主要介绍了使用Qt5.12.12与VS2022时,因MSVC编译器版本不匹配及WindowsSDK缺失导致配置错误的问题解决,感兴趣的可以了解一下... 目录0、背景:qt5.12.12+vs2022一、症状:二、原因:(可以跳过,直奔后面的解决方法)三、解决方

深度剖析SpringBoot日志性能提升的原因与解决

《深度剖析SpringBoot日志性能提升的原因与解决》日志记录本该是辅助工具,却为何成了性能瓶颈,SpringBoot如何用代码彻底破解日志导致的高延迟问题,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言第一章:日志性能陷阱的底层原理1.1 日志级别的“双刃剑”效应1.2 同步日志的“吞吐量杀手”

java -jar example.jar 产生的日志输出到指定文件的方法

《java-jarexample.jar产生的日志输出到指定文件的方法》这篇文章给大家介绍java-jarexample.jar产生的日志输出到指定文件的方法,本文给大家介绍的非常详细,对大家的... 目录怎么让 Java -jar example.jar 产生的日志输出到指定文件一、方法1:使用重定向1、

c++日志库log4cplus快速入门小结

《c++日志库log4cplus快速入门小结》文章浏览阅读1.1w次,点赞9次,收藏44次。本文介绍Log4cplus,一种适用于C++的线程安全日志记录API,提供灵活的日志管理和配置控制。文章涵盖... 目录简介日志等级配置文件使用关于初始化使用示例总结参考资料简介log4j 用于Java,log4c

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把

Qt中实现多线程导出数据功能的四种方式小结

《Qt中实现多线程导出数据功能的四种方式小结》在以往的项目开发中,在很多地方用到了多线程,本文将记录下在Qt开发中用到的多线程技术实现方法,以导出指定范围的数字到txt文件为例,展示多线程不同的实现方... 目录前言导出文件的示例工具类QThreadQObject的moveToThread方法实现多线程QC

Spring Boot集成/输出/日志级别控制/持久化开发实践

《SpringBoot集成/输出/日志级别控制/持久化开发实践》SpringBoot默认集成Logback,支持灵活日志级别配置(INFO/DEBUG等),输出包含时间戳、级别、类名等信息,并可通过... 目录一、日志概述1.1、Spring Boot日志简介1.2、日志框架与默认配置1.3、日志的核心作用

Mysql中设计数据表的过程解析

《Mysql中设计数据表的过程解析》数据库约束通过NOTNULL、UNIQUE、DEFAULT、主键和外键等规则保障数据完整性,自动校验数据,减少人工错误,提升数据一致性和业务逻辑严谨性,本文介绍My... 目录1.引言2.NOT NULL——制定某列不可以存储NULL值2.UNIQUE——保证某一列的每一