您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页QTableView使用QTextDocument绘制Html的缩略支持

QTableView使用QTextDocument绘制Html的缩略支持

来源:意榕旅游网

QTableView使用QTextDocument绘制单行Html的文本缩略支持


如果要在QTableView的单元格支持Html,通常做法是使用QTextDocument绘制,由于带有标签的Html文本总是长于实际显示的文本,所以无法直接使用QFontMetrics::elidedText。如果对纯文本进行缩略,又不好判断对应Html是哪部分被替换了。

实际上QTextDocument支持文本编辑,Html文本会被转化为Qt的格式,因此,使用坐标去测试文本是否超出显示区域再进行替换,可实现不同的缩略模式。

方案原理

目前仅简单实现了单行文本的缩略,如果要实现多行文本的或者带有图片等元素,就比较麻烦,这里不做讨论。

文档布局

QTextDocument::documentLayout接口可以获取到文档的布局,QAbstractTextDocumentLayout提供了hitTest接口测试指定坐标的文档位置:

virtual int hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy);

其中第二个参数是指精确模式,经过测试:

  • Qt::ExactHit返回坐标位置的文档位置,如果不在文字区域则返回-1
  • Qt::FuzzyHit返回坐标位置最近的文档位置,如果不在文字区域可能返回文档尾部。与Qt::ExactHit区别是,当坐标在某个字符区域偏左,返回字符位置,偏右则返回下一位置,类似编辑器里用将光标移动至鼠标点击位置的策略。
文档编辑

QTextDocument使用QTextCursor进行编辑,QTextCursor提供了非常多的编辑操作。这里主要用来选择需要省略的文本并替换为“…”。

实现

效果

以下是三种不同的省略模式的表现。

交互与样式

QTextDocument不支持直接交互,所以如果要实现类似点击链接跳转的行为,就需要通过接口获取链接。

QTextDocument设置文本后就已经跟根据文本创建了所有格式,如果要替换一些默认样式,比如超链接,就需要查找链接进行调整了。

加上缩略模式的交互,就需要根据缩略后的内容判断,有时间再考虑怎么做吧。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务