QListview或Qtableview等控件无法识别Html代码的解决方法(让Qlistview成为富文本)_安培的忧伤的博客-程序员宅基地

技术标签: C++  c++  QT  qt  html  

在QT当中,许许多多的控件是能识别html代码的,比如Qlable,Qpushbutton等等,这些控件都是支持识别Html代码的,例如下面代码:

QString a;   
a.append(QString("<font style='color:red;'>%1</font>").arg("aaa"));
ui->lable->settext(a);

此时会Qlable会显示一个红色的aaa的标签,button也是如此。都是能自动识别的

但是这一方案在像Qlistview或者Qtableview中就不实用了(此处使用的是Qlistview),虽然在有QlistviewQStandardItem::setForeground和QStandardItem::setBackground这两个方法可以设置整行颜色背景和字体颜色,但是我想实现利用字符串更改颜色字体,在Qlistview就能实现显示,但是原本的控件使用会出现下面这个情况

但是这并不是我想要的结果,我想要的结果如下:

以上使用的model是QStringListModel

在经过好几天的测试,查找资料终于找到解决方案

方案比较简单,既然Qlistview不支持富文本,那就让他成为富文本

自定义一个MyModel类,这个类继承QStyledItemDelegate,从而实现对Qlistview的每行内容的代理。

mymodel.h代码如下:

class MyModel:public QStyledItemDelegate
{   
   Q_OBJECT
   protected:    
   void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const;
};

mymodel.cpp代码如下:

void MyModel::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{    
    QStyleOptionViewItemV4 optionV4 = option;    
    initStyleOption(&optionV4, index);    
    QStyle *style = optionV4.widget? optionV4.widget->style() : QApplication::style();    
    QTextDocument doc;   
    doc.setHtml(optionV4.text);    
    // Painting item without text    
    optionV4.text = QString();    
    style->drawControl(QStyle::CE_ItemViewItem, &optionV4, painter);    
    QAbstractTextDocumentLayout::PaintContext ctx;   
    // Highlighting text if item is selected    
    if (optionV4.state & QStyle::State_Selected)        
        ctx.palette.setColor(QPalette::Text, optionV4.palette.color(QPalette::Active, QPalette::HighlightedText));       
    QRect textRect = style->subElementRect(QStyle::SE_ItemViewItemText, &optionV4);    
    painter->save();    
    painter->translate(textRect.topLeft());   
    painter->setClipRect(textRect.translated(-textRect.topLeft()));    
    doc.documentLayout()->draw(painter, ctx);    
    painter->restore();
}

 

这样一来  使用代理功能就可以实现让Qlistview成为富文本,测试代码如下:

 QString a;   
 a.append(QString("<font style='background-color:#ffcccc; color:red;'>%1</font>").arg("aaa"));   
 a.append('\n');   
 a.append(QString("<font style='background-color:#ffcccc; color:red;'>%1</font>").arg("衰老和你"));    
 QStringList b;    
 b = a.split('\n');   
 QStringListModel *model =new QStringListModel();    
 ui->listview->setModel(model);    
 ui->listview->setItemDelegateForColumn(0, new MyModel());   
 model->setStringList(b);

测试结果:

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/REDPINGPING/article/details/106618890

智能推荐

FPAG学习笔记——I2C接口实现_星河带悦流的博客-程序员宅基地

I2C总线介绍  I2C总线是由Philips公司开发的一种简单、双向二线制同步串行总线。它只需要两根线即可在连接于总线上的器件之间传送信息。  主器件用于启动总线传送数据,并产生时钟以开放传送的器件,此时任何被寻址的器件均被认为是从器件.在总线上主和从、发和收的关系不是恒定的,而取决于此时数据传送方向。如果主机要发送数据给从器件,则主机首先寻址从器件,然后主动发送数据至从器件,最后由主机终止数据传送;如果主机要接收从器件的数据,首先由主器件寻址从器件.然后主机接收从器件发送的数据,最后由主机终止接收过

django 消息模块 (messages ) 的使用_Alvin__Yang的博客-程序员宅基地_django message用法

django 使用消息模块,要注意的是,返回的render_to_response 需要加上context_instance具体的:from django.contrib import messagesfrom django.shortcuts import render_to_response,RequestContextfrom django.template import

从客户端(hidXML="<FlexCell xml:space=...")中检测到有潜在危险的Request.Form值_weixin_30691871的博客-程序员宅基地

使用FlexCell生产报表,使用浏览器查看报表出现以下错误提示;解决方法解决方案一:修改浏览器为兼容模式解决方案二: 在.aspx文件头中加入这句: &lt;%@ Page validateRequest="false"%&gt; 解决方案三: 修改web.config文件: &lt;configuration&gt; &lt;system.web&gt; &...

mysql50521_MySQL5.5 安装mcafee mysql-audit插件 不成功_新德里的雨的博客-程序员宅基地

安装步骤还是比较简单的,只有几步:1)查看插件目录mysql&gt; SHOW GLOBAL VARIABLES LIKE 'plugin_dir';+---------------+--------------------+| Variable_name | Value |+---------------+--------------------+| plugin_di...

Ceph转角遇见k8s:记分布式系统界一对名角的浪漫牵手_Kubernetes中文社区的博客-程序员宅基地

1、“佛说前世无数次的痛苦挣扎,换得今生的一次邂逅。话说分布式系统界的名角ceph,志向远大,他要做分布式存储领域的linux,但接触过ceph的爱好者在初次使用ceph时,都经历过比较痛苦的部署过程。还好后来有了ceph-deploy工具,部署会简单很多。但是由于ceph安装包的依赖关系有点复杂,特别是在没有匹配操作系统版本的ceph安装包时,通过源码编译并安装也是更加头痛的一件事情:

老板电器维修数据AdaBoost_时光入海流Zz的博客-程序员宅基地

1 数据挖掘与预处理1.1数据背景高质量的产品不仅能很好地满足顾客对产品使用功能的需要,获得良好的使用体验,提升企业形象和商誉,同时能为企业减少售后维修成本,增加利润。燃气灶市场已成为继家电市场之后各大电器公司竞争的新战场。某电器公司的燃气灶产品销售额一直在国内处于领先地位,把产品质量视为重中之重,每年都要对其产品质量数据进行分析研究,以期不断完善,精益求精。1.2数据概况本次建模数据来源于12月电器公司燃气灶质量情况统计数据,记录到的燃气灶故障现象均为“打不着火”,其主要的数据基本统计概况如下:

随便推点

2004计算机一级冲刺,2016年计算机一级MSOffice冲刺题及答案_文小刚的博客-程序员宅基地

2016年计算机一级MSOffice冲刺题及答案同学们在最后几天复习计算机等级考试时,要学会对自己所学知识进行查漏补缺,下面百分网小编为大家搜索整理了关于计算机一级MSOffice冲刺题及答案,欢迎参考练习,希望对大家备考有所帮助!想了解更多相关信息请持续关注我们应届毕业生考试网。1.下列哪些滤镜只对RGB滤镜起作用:BA. 马赛克   B. 光照效果   C. 波纹   D. 浮雕效果2.在使用...

python 使用 openpyxl 模块控制 excel 常用操作_菜猫小六的博客-程序员宅基地

title: python 使用 openpyxl 模块控制 excel 常用操作tags: [&#39;openpyxl&#39;,&#39;python&#39;,&#39;excel&#39;]date: 2021-05-10categories: &quot;搬砖&quot;使用的库openpyxlimport openpyxl作用的对象文件后缀名为 .xlsxexcel几个操作单元工作簿 workbook表单 wooksheet行.

oracle direct-load,sql*loader中Direct参数如何使用?_何欣颜的博客-程序员宅基地

SQL&gt; create table test_sqlldr_direct nologging as selectOWNER,OBJECT_NAME ,SUBOBJECT_NAME ,OBJECT_ID , DATA_OBJECT_ID , OBJECT_TYPE from all_objects where rownum &lt; 1;表已创建。...

【源码】JUC —— LinkedBlockingQueue 浅析_小水牛...的博客-程序员宅基地

【源码】JUC —— LinkedBlockingQueue 浅析前言LinkedBlockingQueueNode属性、构造方法add(E e) &amp; offer(E e)put(E e) &amp; offer(E e, long timeout, TimeUnit unit)enqueue(Node node)remove() &amp; poll()take() &amp; poll(long timeout, TimeUnit unit)前言LinkedBlockingQueue,基于

dw显示云服务器的数据库,dw如何与测试服务器连接数据库_weixin_39895167的博客-程序员宅基地

dw如何与测试服务器连接数据库 内容精选换一换华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。华为云帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题、视频帮助等技术文档,帮助您快速上手使用华为云服务。dw如何与测试服务器连接数据库 相关内容我们强烈建议您使用...

修改隐含参数_library_cache_advice解决性能问题一例(转)_csdn909034的博客-程序员宅基地

客户的一套重要生产系统,出现了性能问题。这个问题涉及的信息如下:数据库主机的CPU利用率长期在100%左右。应用系统在晚上进行调整后,开始出现了问题。数据库中出现大量的latch: shared pool、latch: libr...