qt富文本生成&解析
富文本结构详见Qt文档:Rich Text Document Structure
Qt里QTextDocument
类提供了富文本支持,可以使用setHtml()
设置富文本,使用toHtml()
获取富文本。
1.自定义对象
QTextObjectInterface
类允许在QTextDocument
类中增加自定义对象
实现
详见QTextObjectInterface Class
继承
QObject
和<QTextObjectInterface>
1
2
3
4
5class SvgTextObject : public QObject, public QTextObjectInterface
{
Q_OBJECT
Q_INTERFACES(QTextObjectInterface)
...实现两个接口函数
1
2
3
4// 对象呈现样式,用painter画出来
virtual void drawObject(QPainter *painter, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0;
// 自定义对象大小
virtual QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format) = 0
注册
注册自定义枚举
1
2
3
4
5
6
7
8
9
10// 对象枚举
enum MyTextObject
{
kMyObject = QTextFormat::UserObject + 1
};
// 属性枚举
enum MyTextProperty
{
kMyProperty = QTextFormat::UserProperty + 1
};注册自定义对象
void QAbstractTextDocumentLayout::registerHandler(int objectType, QObject *component)
1
2
3
4QTextEdit* editor = new QTextEdit(/*parent*/);
SvgTextObject* handle = new SvgTextObject;
handle->setParent(editor);
editor->document()->documentLayout()->registerHandler(kMyObject, handle);
插入
设置对象属性
1
2
3
4T info; // 对象携带信息
QTextCharFormat format;
format.setObjectType(kMyObject);
format.setProperty(kMyProperty, QVariant::fromValue(info));插入
1
2
3QTextCursor tc = editor->textCursor();
tc.insertText(QString(QChar::ObjectReplacementCharacter), format);
editor.setTextCursor(tc);
2.图片
插入
法1:使用html语言
1 | QString html_text; |
法2:使用QTextCursor
插入 QTextImageFormat
1 | // QImage image 图片资源 |
3.UI交互
可以根据鼠标位置获取锚点
1 | QString QTextEdit::anchorAt(const QPoint &pos) const |
删除鼠标位置元素
1 | void MyTextEdit::RemoveChar(const QPoint& pos) // pos 鼠标位置 event->pos() |
4.富文本解析
QTextDocument的基本结构如图:
依次遍历便可解析:
1 | // 文本块处理 |
# 相关文章
1.qt档案库
2.配置Qt&Android开发环境
3.qt增加mqtt模块
4.定制qtcreator
5.qt剪贴板
6.Qt MVC模型
7.QThread使用方法
8.QList去重
1.qt档案库
2.配置Qt&Android开发环境
3.qt增加mqtt模块
4.定制qtcreator
5.qt剪贴板
6.Qt MVC模型
7.QThread使用方法
8.QList去重