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

news2024/11/15 19:47:09

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

文章目录

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

I - 控件使用


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

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

class QStringListModel;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    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;

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

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

相关文章

新鲜出炉!界面控件DevExpress WinForms 2024产品路线图预览(三)

DevExpress WinForm拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜任…

专业140+总400+重庆邮电大学801信号与系统考研经验重邮电子信息与通信工程,真题,大纲,参考书。

今年报考重庆邮电大学研究生&#xff0c;初试专业课801信号与系统140总分400&#xff0c;总结一下自己去年的复习经验&#xff0c;希望对大家复习有帮助。 专业课&#xff1a; 重邮专业801信号与系统难度中等&#xff0c;今年140算是正常发挥&#xff0c;没有达到Jenny老师要求…

【经验分享】Windows10无法通过SSHFS连接服务器

【经验分享】Windows10如何通过SSHFS连接服务器 前言问题分析解决方法 前言 现在很多公司出于成本考虑&#xff0c;不会为每一台电脑都提供高配置&#xff0c;所以需要通过访问云服务器来进行编译等操作。程序员如果配备的是一台windows电脑&#xff0c;那么需要访问linux服务…

Java复习04 注解和反射

Java复习04 注解和反射 初学 注解和反射的时候 我的问题是 什么是注解&#xff1f; 什么是反射&#xff1f;单例模式 Stream ForkJoin有什么区别&#xff1f; 注解的分类有哪些&#xff1f;怎么区分&#xff1f;反射的分类有哪些&#xff1f;怎么区分&#xff1f; 反射里面Con…

视频水印如何去除?看看这三款工具!

在处理视频内容时&#xff0c;经常会遇到带有水印的视频素材。这些水印有时会遮挡重要的视觉信息&#xff0c;或者影响视频的美观性。为了保持视频内容的完整性和专业性&#xff0c;一个高效的视频去水印工具就显得尤为重要。下面我为大家推荐三款能够轻松去除视频水印的工具。…

Qt+FFmpeg+opengl从零制作视频播放器-3.解封装

解封装&#xff1a;如下图所示&#xff0c;就是将FLV、MKV、MP4等文件解封装为视频H.264或H.265压缩数据&#xff0c;音频MP3或AAC的压缩数据&#xff0c;下图为常用的基本操作。 ffmpeg使用解封装的基本流程如下&#xff1a; 在使用FFmpeg API之前&#xff0c;需要先注册API&a…

离线安装数据库 mysql 5.7 linux

离线安装数据库 mysql 5.7 linux 方法一 参考链接Linux(Debian10.2)安装MySQL5.7.24环境 赋予文件执行权限chmod x 文件名 使用root用户sudo su解压文件tar xvf mysql-5.7.42-linux-glibc2.12-x86_64.tar.gz重命名mv mysql-5.7.42-linux-glibc2.12-x86_64 mysql将桌面的mys…

探索5个启发人心的网页设计案例,助您打造独特个人作品集!

对于网页设计师来说&#xff0c;网页设计作品集不仅是网页的门面&#xff0c;也是个人专业素养的体现。那么我们就不能掉以轻心地设计作品集了。无论是制作简单大方的作品集还是表现力极强的优秀作品集&#xff0c;设计师都必须非常努力地参考大量的设计作品来获得灵感。 国产…

Docker 安装部署 SqlServer 数据库

Docker 安装部署 SqlServer 数据库 背景&#xff1a; ​ 最近在开发数据中台数据集成模块&#xff0c;需要对接大量的数据做测试&#xff0c; 由于SqlServer 下载安装会耗费大量时间&#xff0c;所以采用 Docker 安装 Sqlserver 的方式部署数据库。 1、拉去 sqlserver 镜像 …

Linux系统下基于VSCode和Cmake进行C++开发

目录 简介一、GCC编译器1.1创建cpp文件1.2编译过程1.3g重要编译参数 二、GDB调试器三、IDE-VScode3.1 VSCode常用快捷键3.2 swap测试 四、CMake4.1CMake介绍4.2 CMake语法特性介绍4.3 CMake重要指令和常用变量4.4 CMake编译流程4.5CMake代码实践 五、使用VSCode进行完整项目开发…

Js输入输出语句

输入语法 prompt("您想输入的是&#xff1f;")输出语法: 语法1: document.write(‘要出的内容’&#xff09; <body><script>document.write("你好")document.write("<h1>我是<h1>")</script> </body>作…

基于单片机的事务管理系统

基于单片机的事务管理系统 摘 要 所谓事务管理系统就是主要用来做提醒&#xff0c;辅助以计时、秒表等的一个小系统。利用MCS51单片机即可完成系统硬件需要&#xff0c;成本低廉&#xff0c;程序简单&#xff0c;功能丰富实用&#xff0c;使用率广。根据题目的设计要求&#…

Github上哪些好用的安全工具1

专注于web漏洞挖掘、内网渗透、免杀和代码审计&#xff0c;感谢各位师傅的关注&#xff01;网安之路漫长&#xff0c;与君共勉&#xff01; URLFinder 一款快速提取网页信息的工具。该项目可以快速爬取网页上的 URL 地址、JS 文件里的 API 接口等信息&#xff0c;支持批量抓取…

QTextToSpeech的使用——Qt

前言 之前随便看了几眼QTextToSpeech的帮助就封装使用了&#xff0c;达到了效果就没再管了&#xff0c;最近需要在上面加功能&#xff08;变换语速&#xff09;&#xff0c;就写了个小Demo后&#xff0c;发现不对劲了。 出现的问题 场景 写了个队列添加到语音播放子线程中&a…

Day34:安全开发-JavaEE应用反射机制攻击链类对象成员变量方法构造方法

目录 Java-反射-Class对象类获取 Java-反射-Field成员变量类获取 Java-反射-Method成员方法类获取 Java-反射-Constructor构造方法类获取 Java-反射-不安全命令执行&反序列化链构造 思维导图 Java知识点 功能&#xff1a;数据库操作&#xff0c;文件操作&#xff0c;…

Redis:使用redis-dump导出、导入、还原数据实例

redis的备份和还原&#xff0c;借助了第三方的工具&#xff0c;redis-dump 1、安装必要环境 yum -y install zlib-devel openssl-devel2、安装redis-dump 安装ruby&#xff1a; ruby下载地址&#xff1a;https://www.ruby-lang.org/zh_cn/downloads/ 我下载的是 2.5.0 版本…

GPT-SoVITS开源音色克隆框架的训练与调试

GPT-SoVITS开源框架的报错与调试 遇到的问题解决办法 GPT-SoVITS是一款创新的跨语言音色克隆工具&#xff0c;同时也是一个非常棒的少样本中文声音克隆项目。 它是是一个开源的TTS项目&#xff0c;只需要1分钟的音频文件就可以克隆声音&#xff0c;支持将汉语、英语、日语三种…

Linux ping可以上内网,不能上外网(系统重启DNS不生效)(直接更改/etc/resolv.conf修改nameserver重启被重置)

在Linux上可以连内网&#xff0c;不能连外网 ping内网可以&#xff0c;外网不行 可能的问题&#xff1a; 1.可能设置了网络防火墙&#xff0c;阻止了服务器访问外网的请求 2.DNS解析问题&#xff1a;检查服务器的DNS设置是否正确&#xff0c;能够正确解析外部域名。如果DNS解析…

案例分析篇15:软件开发方法考点(2024年软考高级系统架构设计师冲刺知识点总结系列文章)

专栏系列文章推荐: 2024高级系统架构设计师备考资料(高频考点&真题&经验)https://blog.csdn.net/seeker1994/category_12593400.html 【历年案例分析真题考点汇总】与【专栏文章案例分析高频考点目录】(2024年软考高级系统架构设计师冲刺知识点总结-案例分析篇-…

Vue首屏优化方案

在Vue项目中&#xff0c;引入到工程中的所有js、css文件&#xff0c;编译时都会被打包进vendor.js&#xff0c;浏览器在加载该文件之后才能开始显示首屏。若是引入的库众多&#xff0c;那么vendor.js文件体积将会相当的大&#xff0c;影响首屏的体验。可以看个例子&#xff1a;…