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

news2024/11/26 22:24:52

我们一般使用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);
}

运行效果

请添加图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1833516.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数字孪生定义及应用介绍

数字孪生定义及应用介绍 1 数字孪生&#xff08;Digital Twin, DT&#xff09;概述1.1 定义1.2 功能1.3 使用场景1.4 数字孪生三步走1.4.1 数字模型1.4.2 数字影子1.4.3 数字孪生 数字孪生地球平台Earth-2 参考 1 数字孪生&#xff08;Digital Twin, DT&#xff09;概述 数字孪…

Linux系统OpenSSH_9.7p1升级详细步骤

版本说明 当前内核版本如下 当前操作系统版本如下 当前OpenSSH版本和OpenSSL版本如下 升级说明 openssh依赖于openssl和zlib&#xff0c;而openssl依赖于zlib&#xff0c;所以我们要先安装zlib&#xff0c;然后是openssl&#xff0c;最后是openssh。zlib-1.3.1下载地址&#…

新版嘎嘎快充互联互通系统配置文档

宝塔环境配置 登录宝塔账号&#xff0c;安装nginx、mysql5.7、php7.2、supervisor、redisphp安装扩展&#xff1a; 1&#xff09;安装swooleloader72 将嘎嘎官方提供的swoole_loader_72_nts.so文件上传到 /www/server/php/72/lib/php/extensions/no-debug-non-zts-20170718…

阿里巴巴全球数学竞赛报名条件

#竞赛概览与历史# “阿里巴巴全球数学竞赛”&#xff08;Alibaba Global Mathematics Competition&#xff09;由阿里巴巴公益、阿里巴巴达摩院共同举办&#xff0c;面向全球的数学爱好者&#xff0c;集竞赛、培训、交流于一体&#xff0c;旨在全球范围内引领开启关注数学、理解…

Debian/Ubuntu linux安装软件

1、官方软件商店安装 2、deb包安装 报错不是sudoers&#xff0c;首先将用户添加到sudo su -l adduser USERNAME sudo exit然后&#xff0c;退出桌面环境并再次登录。 您可以通过输入以下内容来检查上述过程是否成功&#xff1a; groups下载deb包 altshiftf4或右键打开命令行…

【交易策略】#22-24 残差资金流强度因子

【交易策略】#22-24 残差资金流强度因子

Web前端项目-拼图游戏【附源码】

拼图游戏 拼图游戏是一种经典的益智游戏&#xff0c;通过HTML、CSS和JavaScript等前端技术的综合运用来实现&#xff1b;拼图游戏可以锻炼玩家的观察能力、空间认知能力和逻辑思维能力。游戏开始时&#xff0c;一张图片会被切割成多个小块&#xff0c;并以随机顺序排列在游戏区…

脑白金咖啡首辆快闪咖啡车亮相上海,瞄准年轻健康饮品市场

近日&#xff0c;巨人集团旗下脑白金快闪咖啡车现身上海外滩BFC中心&#xff0c;这是继脑白金咖啡在上海地标建筑武康大楼开设快闪店以来&#xff0c;首次以咖啡车形式亮相大众视野。 据「TMT星球」了解&#xff0c;此次快闪活动为期一个月&#xff0c;与合作伙伴共同打造潮流…

Mac 开发vscode常用命令

1 打开vscode settting配置 commandshiftp 输入&#xff1a;Open User Setting 2

如何优雅的了解OpenHarmony-v4.1-Release的init启动流程

一、启动概述 在产品代码成功编译通过后&#xff0c;开始进行下一步的运行调测阶段&#xff0c;而运行调测第一步便需要了解系统的启动过程。对于 OpenHarmony 来说&#xff0c;系统启动流程如下&#xff1a; ---> uboot启动---> uboot启动内核---> 内核挂载根文件系…

深入理解@EnableAspectJAutoProxy的力量

个人名片 &#x1f393;作者简介&#xff1a;java领域优质创作者 &#x1f310;个人主页&#xff1a;码农阿豪 &#x1f4de;工作室&#xff1a;新空间代码工作室&#xff08;提供各种软件服务&#xff09; &#x1f48c;个人邮箱&#xff1a;[2435024119qq.com] &#x1f4f1…

怎么用AI绘画完成设计创作?

AI绘画工具为设计师提供了强大的功能和便利性&#xff0c;用AI绘画进行艺术创作能够使设计师能够更快地迭代和优化设计方案&#xff0c;提高设计效率。那么怎么用AI绘画完成设计创作? 要使用AI绘画完成设计创作&#xff0c;首先需要选择一个合适的工具。目前市场上有很多优秀的…

大话设计模式解读03-装饰模式

本篇文章&#xff0c;来解读《大话设计模式》的第6章——装饰模式。并通过C代码实现实例代码的功能。 注&#xff1a;第3~6章讲的是设计模式中的一些原则&#xff08;第3章&#xff1a;单一职责原则&#xff1b;第4章&#xff1a;开放-封闭原则&#xff1b;第5章&#xff1a;依…

吴恩达2022机器学习专项课程C2W3:2.26 机器学习发展历程

目录 开发机器学习系统的过程开发机器学习案例1.问题描述2.创建监督学习算法3.解决问题4.小结 误差分析1.概述2.误差分析解决之前的问题3.小结 增加数据1.简述2.增加数据案例一3.增加数据案例二4.添加数据的技巧5.空白创建数据6.小结 迁移学习1.简述2.为什么迁移学习有作用3.小…

考勤机如何选购

考勤机如何选购 选购目的&#xff1a;为强化管理&#xff0c;保证公司考勤工作顺利开展&#xff0c;拟在我司采用指纹识别技术进行员工考勤&#xff0c;如此可有效提升工作效率&#xff0c;而指纹识别考勤技术又是最为便捷、可靠且非侵入性的考勤方式。 指纹考勤…

Python Django 实现教师、学生双端登录管理系统

文章目录 Python Django 实现教师、学生双端登录管理系统引言Django框架简介环境准备模型设计用户认证视图和模板URL路由前端设计测试和部署获取开源项目参考 Python Django 实现教师、学生双端登录管理系统 引言 在当今的教育环境中&#xff0c;数字化管理系统已成为必不可少…

Hi3861 OpenHarmony嵌入式应用入门--点灯

本篇实现对gpio的控制&#xff0c;通过控制输出进行gpio的点灯操作。 硬件 我们来操作IO2&#xff0c;控制绿色的灯。 软件 GPIO API API名称 说明 hi_u32 hi_gpio_deinit(hi_void); GPIO模块初始化 hi_u32 hi_io_set_pull(hi_io_name id, hi_io_pull val); 设置某个IO…

一文教你使用sql快速查询1对多数据关系,生成一个多维数据!

本篇文章主要讲解&#xff1a;利用mysql的sql特性&#xff0c;实现对多表查询下&#xff0c;一个用户对应多条记录数据查询为一条数据并以列表形式显示的教程。 日期&#xff1a;2024年6月17日 作者&#xff1a;任聪聪 一、创建数据库表 创建test_a表&#xff0c;内容如下&…

Python 全栈系列250 数据流实践

说明 之前好几个企业都提过飞机在飞的时候换发动机的例子&#xff0c;来比喻变革是多么无奈和危险。还有的说法更直接&#xff1a;不变等死&#xff0c;变就是找死&#xff0c;总得选一样。 后来我自己的体会也差不多是这样&#xff0c;总有一些窘境让你抉择&#xff1a;是忽忽…

在Qt编写的exe或者dll中设置版本号

1.背景 在别人编写的exe或者动态库中&#xff0c;通过右键–》属性–》详细信息中&#xff0c;通常都有版本信息&#xff1a; 那我们自己编译出来的Qt程序&#xff0c;如何设置这些版本号呢&#xff1f; 2.解决方案 参考【.pro文件中设置版本等信息】&#xff0c;只要在工…