脚本之家

电脑版
提示:原网页已由神马搜索转码, 内容由www.jb51.net提供.
您的位置:首页软件编程C 语言→ Qt QTextBrowser日志窗口

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

  更新时间:2024年06月21日 08:33:55  作者:ll_gg_tt 
本文主要介绍了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控件设计日志窗口的文章就介绍到这了,更多相关Qt中利用QTextBrowser控件设计日志窗口内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

    • 这篇文章主要为大家详细介绍了C++实现简单的计算器功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
      2022-01-01
    • 除了用嵌套if语句外,C++中还提供switch语句,又称为“开关语句”,用来实现多分支(多选一),下面这篇文章主要给大家介绍了关于C++性能剖析教程之switch语句的相关资料,需要的朋友可以参考下
      2018-06-06
    • 这篇文章主要介绍了C++实现线程安全的单例模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
      2019-03-03
    • 这篇文章主要介绍了C语言的结构体中成员变量偏移问题,以讲解如何编写宏来对成员变量进行修改为主,需要的朋友可以参考下
      2016-04-04
    • C语言中有一些预先定义的字符串,他们本身被赋予了自身的功能。并且我们在定义变量的时候,不能去抢他们的名字来用。他们就是今天的主角:关键字,下面文章将给大家做详细介绍
      2021-09-09
    • 这篇文章主要介绍了C++递归算法实例代码,还是比较不错的,运用了递归算法解决相关问题,这里分享给大家,需要的朋友可以参考下。
      2017-11-11
    • 这篇文章主要介绍了C语言对数组元素进行冒泡排序的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
      2021-02-02
    • 这篇文章主要为大家详细介绍了如何基于Qt实现可拖动自定义控件,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以了解一下
      2023-04-04
    • 回溯法即是在按条件搜索走不通的情况下退回再选择其他路线的方法,这里我们来看C语言使用回溯法解旅行售货员问题与图的m着色问题的方法示例:
      2016-07-07
    • 这篇文章主要介绍了C++ deque/queue/stack的底层原理解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
      2023-07-07

    最新评论