QTableView使用HTML显示富文本

对于QTableView中的显示,我们前面介绍过很多种,其中包括:文本、进度条、复选框等,今天我们介绍一下关于富文本的显示。

可能绝大多数小伙伴会通过QAbstractTableModel中的data来实现,可是现实告诉我们,那是行不通的,那么我们如何去显示呢?请看正文。

效果

源码

下面我们使用QAbstractItemDelegate来进行富文本的显示,主要通过QTextDocument设置HTML代码来实现。

void CheckBoxDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
    QStyleOptionViewItem viewOption(option);
    initStyleOption(&viewOption, index);
    if (option.state.testFlag(QStyle::State_HasFocus))
        viewOption.state = viewOption.state ^ QStyle::State_HasFocus;

    // ... 省略
    // 设置显示文本为空,使用默认样式
    QStyle *pStyle = viewOption.widget? viewOption.widget->style() : QApplication::style();

    viewOption.text = "";
    pStyle->drawControl(QStyle::CE_ItemViewItem, &viewOption, painter, viewOption.widget);

    // 需要显示的HTML
    QString strHTML = QString("<html>                               <head>                               <style>                               font{font-size:18px; color:white;} #f{font-size:26px; color: green;}                               </style>                               </head>                               <body>                              <font>%1</font><font id=\"f\">%2</font>                               <img src=\":/Images/logo\" width=\"40\" height=\"40\">                               </body>                               </html>").arg("I am a ").arg("Qter");

    QTextDocument doc;
    doc.setHtml(strHTML);

    QAbstractTextDocumentLayout::PaintContext paintContext;

    QRect textRect = pStyle->subElementRect(QStyle::SE_ItemViewItemText, &viewOption);
    painter->save();
    // 坐标变换,将左上角设置为原点
    painter->translate(textRect.topLeft());
    // 设置HTML绘制区域
    painter->setClipRect(textRect.translated(-textRect.topLeft()));

    doc.documentLayout()->draw(painter, paintContext);
    painter->restore();
}

分析

首先我们需要保留原有样式,所以设置QStyleOptionViewItem的文本为空,然后调用QStyle的drawControl接口来进行绘制,然后通过QTextDocument设置HTML代码,利用QPainter来进行文本的绘制,绘制区域通过整个文本区域经过坐标变换后得到的。

http://blog.csdn.net/liang19890820/article/details/50973099

时间: 2024-12-29 12:53:03

QTableView使用HTML显示富文本的相关文章

Android:TextView显示富文本信息

最近需要在TextView中显示一些超链接等信息,如URL(点击后跳转),显示网络图片等. 整理如下: 1.显示URl,在需要显示URL超链接的TextView中设置 textview.setText(Html.fromHtml(urlString)) (urlString 用html语法来标识) versionText.setMovementMethod(LinkMovementMethod.getInstance()); 上面一句必须设置,否则将无法跳转. 2.显示网络图片 textview

QToolTip显示富文本问题

问题:QToolTip支持显示富文本,因此会将html解析出来显示,但有时候不希望解析呢? 答:根据官方文档解释,如下: 可以调用 QString strTemp = ...QToolTip::showText(QCursor::pos(), "p style='white-space:pre'>" + strTemp.toHtmlEscaped()); 代替 QToolTip::showText(QCursor::pos(), strTemp); 这样就可以不解析富文本,输入什

Django 中文乱码问题&amp;富文本显示

1.起源:从后台管理添加中文对象,正常,但是再次点击编辑的时候,抛出异常,显示编码问题. 解决:在项目的manage.py 的文件头部添加  import sys  reload(sys)  sys.setdefaultencoding('utf8') 确认有效. 2.正常富文本连着标签内容一起显示出来,需要将富文本放入如下代码中,就可以显示富文本效果了: {% autoescape off %} {{post.content}} {% endautoescape %}

iOS富文本组件的实现—DTCoreText源码解析 数据篇

本文转载 http://blog.cnbang.net/tech/2630/ DTCoreText是个开源的iOS富文本组件,它可以解析HTML与CSS最终用CoreText绘制出来,通常用于在一些需要显示富文本的场景下代替低性能的UIWebView,来看看它是怎样解析和渲染HTML+CSS的,总体上分成两步: 数据解析—把HTML+CSS转换成NSAttributeString 渲染—用CoreText把NSAttributeString内容渲染出来,再加上图片等元素 本篇先介绍第一步,数据解

转载的一个富文本,挺实用的

文章内容大纲 1.NSMutableAttributedString的基本使用 2.NSMutableAttributedString的简易封装 3.使用开源代码GOBMarkupPaser处理富文本 4.UITextKit简介 5.编程思想的相关思考 前言 富文本使用案例: 这里我自己也用了富文本实现了简单的却也是常用的例子: 对于最后面的¥50中划线这种设置,估计只有富文本最好用了. 在IOS或者Mac OS X通过UIKit提供的用来显示字符串控件有三个: UILable,UITextFi

iOS之富文本总结

文章内容大纲 1.NSMutableAttributedString的基本使用 2.NSMutableAttributedString的简易封装 3.使用开源代码GOBMarkupPaser处理富文本 4.UITextKit简介 5.编程思想的相关思考 前言 富文本使用案例: 这里我自己也用了富文本实现了简单的却也是常用的例子: 对于最后面的¥50中划线这种设置,估计只有富文本最好用了. 在IOS或者Mac OS X通过UIKit提供的用来显示字符串控件有三个: UILable,UITextFi

Django 配置App特定类的富文本编辑器

版本:Django:1.6  Python:2.7 下载TinyMCE.http://www.tinymce.com/download/download.php 解压.将其中的tinymce文件夹放在Django的静态文件目录/static/下. 在tinymce文件夹中已经有tinymce.min.js这个JS文件:我们需要做的是在当前目录下(与tinymce.min.js同级)另外新建一个tinymce_config.min.js: 填充内容如下: tinymce.init({ select

iOS 富文本组件

iOS6 之后,UILabel加入了attributedText属性,为UILabel的文本显示添加了巨大的变化, attributedText使用coreText绘制,支持文本域字体.颜色等设置. 在iOS6 之前,UILabel 只能按照font,textColor属性设置的字体和颜色显示文本,不能对文本中一段文本进行单独的字体和颜色的设置,也不支持url识别,下划线添加,字体加粗等功能.在实际开发中对富文本组件的需求是非常高的,所以出现了很多第三方的富文本组件. OHAttributedL

2 富文本的使用

参考 http://kindeditor.net/docs/usage.html 1  下载软件 2 设置setting.py STATICFILES_DIRS=[ os.path.join(BASE_DIR,"static"), ] # 告诉djanjo项目用户上传的文件保存在哪个目录下 MEDIA_ROOT = os.path.join(BASE_DIR, "upload") # 告诉用户用哪个前缀来访问刚才的定义的那个目录 MEDIA_URL = "