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语言实现简易停车场管理系统

    C语言实现简易停车场管理系统

    这篇文章主要为大家详细介绍了C语言实现简易停车场管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • c语言动态数组示例

    c语言动态数组示例

    这是一个简单的动态分配数组大小的例子,需要的朋友可以参考下
    2014-04-04
  • C语言中将日期和时间以字符串格式输出的方法

    C语言中将日期和时间以字符串格式输出的方法

    这篇文章主要介绍了C语言中将日期和时间以字符串格式输出的方法,分别是ctime()函数和asctime()函数,注意参数区别,需要的朋友可以参考下
    2015-08-08
  • C++链表节点的添加和删除介绍

    C++链表节点的添加和删除介绍

    大家好,本篇文章主要讲的是C++链表节点的添加和删除介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01
  • C语言不使用strcpy函数如何实现字符串复制功能

    C语言不使用strcpy函数如何实现字符串复制功能

    这篇文章主要给大家介绍了关于C语言不使用strcpy函数如何实现字符串复制功能的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • C语言输入三角形边长判断其类型并输出面积实例代码

    C语言输入三角形边长判断其类型并输出面积实例代码

    这篇文章主要介绍了C语言输入三角形边长判断其类型并输出面积实例代码,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • C++的静态成员变量和静态成员函数你了解多少

    C++的静态成员变量和静态成员函数你了解多少

    这篇文章主要为大家详细介绍了C++的静态成员变量和静态成员函数,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • C语言如何计算一个整数的位数

    C语言如何计算一个整数的位数

    这篇文章主要介绍了C语言如何计算一个整数的位数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C语言SetConsoleCursorPosition函数使用方法

    C语言SetConsoleCursorPosition函数使用方法

    这篇文章介绍了C语言SetConsoleCursorPosition函数的使用方法,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • c++中用TINYXML解析XML文件

    c++中用TINYXML解析XML文件

    这篇文章主要介绍了c++中如何用TINYXML解析XML文件,文中案例非常详细,帮助大家更好的了解和学习,感兴趣的朋友可以了解下
    2020-06-06

最新评论