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

相关文章

Qt中QGroupBox控件的实现

《Qt中QGroupBox控件的实现》QGroupBox是Qt框架中一个非常有用的控件,它主要用于组织和管理一组相关的控件,本文主要介绍了Qt中QGroupBox控件的实现,具有一定的参考价值,感兴趣... 目录引言一、基本属性二、常用方法2.1 构造函数 2.2 设置标题2.3 设置复选框模式2.4 是否

QT进行CSV文件初始化与读写操作

《QT进行CSV文件初始化与读写操作》这篇文章主要为大家详细介绍了在QT环境中如何进行CSV文件的初始化、写入和读取操作,本文为大家整理了相关的操作的多种方法,希望对大家有所帮助... 目录前言一、CSV文件初始化二、CSV写入三、CSV读取四、QT 逐行读取csv文件五、Qt如何将数据保存成CSV文件前言

Qt中QUndoView控件的具体使用

《Qt中QUndoView控件的具体使用》QUndoView是Qt框架中用于可视化显示QUndoStack内容的控件,本文主要介绍了Qt中QUndoView控件的具体使用,具有一定的参考价值,感兴趣的... 目录引言一、QUndoView 的用途二、工作原理三、 如何与 QUnDOStack 配合使用四、自

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

SpringBoot日志配置SLF4J和Logback的方法实现

《SpringBoot日志配置SLF4J和Logback的方法实现》日志记录是不可或缺的一部分,本文主要介绍了SpringBoot日志配置SLF4J和Logback的方法实现,文中通过示例代码介绍的非... 目录一、前言二、案例一:初识日志三、案例二:使用Lombok输出日志四、案例三:配置Logback一

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

SpringBoot项目使用MDC给日志增加唯一标识的实现步骤

《SpringBoot项目使用MDC给日志增加唯一标识的实现步骤》本文介绍了如何在SpringBoot项目中使用MDC(MappedDiagnosticContext)为日志增加唯一标识,以便于日... 目录【Java】SpringBoot项目使用MDC给日志增加唯一标识,方便日志追踪1.日志效果2.实现步