【Qt】QListView 显示富文本,设置文本内容颜色

2024-03-15 07:04

本文主要是介绍【Qt】QListView 显示富文本,设置文本内容颜色,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【Qt】QListView 显示富文本,设置文本内容颜色

文章目录

    • I - 控件使用
    • II - 显示富文本
    • III - 注意事项

I - 控件使用


Qt 的 MVC 架构为 MV ,Controller 部分继承到了 View 里,View(视图) 设置 Model(模型),Model 设置数据
这里使用 QStringListModel ,设置 Model 后,只需要设置字符串链表数据就可以了。

头文件中声明 QStringListModel ,这里使用前置声明防止强依赖。

class QStringListModel;class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
// ... private:
//...QStringListModel* m_model;
};

源文件中包含 QStringListModel 头文件

#include <QStringListModel>

构造函数中初始化 QStringListModel,设置 QListView 的 Model ,给要显示的 QStringList 赋值

// 初始化
m_model = new QStringListModel();
// 设置模型
ui->listView->setModel(m_model);// 给 QStringList 赋值
m_list << "Text is Keyword aaa"<< "Keyword ddd"<< "Keyword ccc" << "in some Text Keyword nanana" << "blablabla Keyword";

另外设置 QListView 的其他属性:

  • 设置无编辑触发 NoEditTriggers
  • 设置行间交替显示不同的颜色 setAlternatingRowColors
  • 设置不显示水平滚动条
// 其他设置
ui->listView->setEditTriggers(QAbstractItemView::EditTrigger::NoEditTriggers);
ui->listView->setAlternatingRowColors(true);
ui->listView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);

使用时,只需要操作 Model 设置数据,就可以显示了

m_model->setStringList(m_list);

效果如下图
在这里插入图片描述

II - 显示富文本


QListView 无法直接显示富文本,可以通过设置其他控件来显示富文本,调用 setIndexWidget 接口。

在这里插入图片描述
在 Qt 的帮助文档中可以看到 ownership 转移了,就是说不需要担心内存泄漏的问题,且在同一个索引位置,如果设置了另一个控件,则前一个控件会被删除释放掉。 注意:设置的控件如果 autoFillBackground 没有设置,则控件背景为透明显示。

将 QStringList 中的 Keyword 设置为富文本

QString keyword("Keyword");
for (int i = 0; i < m_list.size(); ++i)
{int index =  m_list[i].indexOf(keyword);m_list[i].insert(index+ keyword.size(), "</font>");m_list[i].insert(index, "<font color='#5050ff'>");}

设置 StringList 并在每个索引处依次添加 QLabel 控件显示富文本

m_model->setStringList(m_list);for (int i = 0; i < m_list.size(); ++i)
{QLabel* label = new QLabel(m_list[i]);label->setTextFormat(Qt::RichText); // 设置显示格式为富文本label->setAutoFillBackground(true); // 设置自动填充背景ui->listView->setIndexWidget(m_model->index(i), label); // 设置控件
}

效果如下图:
在这里插入图片描述

III - 注意事项


此处添加 QLabel 的自动填充背景,会导致 QListView 的控件样式失效,也会导致原来的 QListView 中的项无法被点击、触发
等等。

处理该问题需要设置 QLabel 不自动填充背景色,且设置鼠标事件透明

//label->setAutoFillBackground(true);
label->setAttribute(Qt::WA_TransparentForMouseEvents);

此时由于无自动填充背景,会显示两个控件的文本内容,原始的 QListView item 和新增的 QLabel。
在这里插入图片描述
解决此问题可以用两种方法

  1. 设置数据时,设置为空的字符串,显示时显示实际的
  2. 设置 QListView item 的样式为前景色透明
setStyleSheet("QListView::item {color:transparent}");

最终效果如下:
在这里插入图片描述
另外,富文本中的大于号小于号需要使用特殊符号替换掉,否则无法显示

符号富文本替换
>&gt;
<&lt;

这篇关于【Qt】QListView 显示富文本,设置文本内容颜色的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

全解析CSS Grid 的 auto-fill 和 auto-fit 内容自适应

《全解析CSSGrid的auto-fill和auto-fit内容自适应》:本文主要介绍了全解析CSSGrid的auto-fill和auto-fit内容自适应的相关资料,详细内容请阅读本文,希望能对你有所帮助... css  Grid 的 auto-fill 和 auto-fit/* 父元素 */.gri

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

Python实现word文档内容智能提取以及合成

《Python实现word文档内容智能提取以及合成》这篇文章主要为大家详细介绍了如何使用Python实现从10个左右的docx文档中抽取内容,再调整语言风格后生成新的文档,感兴趣的小伙伴可以了解一下... 目录核心思路技术路径实现步骤阶段一:准备工作阶段二:内容提取 (python 脚本)阶段三:语言风格调

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文件前言

一文详解如何在Python中从字符串中提取部分内容

《一文详解如何在Python中从字符串中提取部分内容》:本文主要介绍如何在Python中从字符串中提取部分内容的相关资料,包括使用正则表达式、Pyparsing库、AST(抽象语法树)、字符串操作... 目录前言解决方案方法一:使用正则表达式方法二:使用 Pyparsing方法三:使用 AST方法四:使用字