QTextEdit添加文本对象(将N个文字结合成一个整体)|世界热点

2023-05-17 19:03:20 来源:QT教程 分享到:

在处理文字的时候我们有时候不得不这样做:“当输入譬如:@人民日报 这样的标记的时候,我希望 [@人民日报] 这几个字符是一个整体, 不能对其中的任意一个字符进行修改

要改也只能改整体。” 类似于QQ群的 @ 功能。


(相关资料图)

现在就记录核心实现,先看看效果:

其中插入的表情就是一个整体,不能修改其中的内容(红色部分)。而自己手输入进去的就是当普通的文本处理了。

首先,定义一个对象来处理这种自定义类型的TextFormat:

先定义自定义的Object的类型和它的属性:

enum TextObject{TO_ObjectAt = QTextFormat::UserObject + 1};enum ObjectProperty{OP_Text = QTextFormat::UserProperty + 1,OP_FontSize};

这是用来处理自定义的TextObject对象的接口

class DIYTextObjectHandler: public QObject, QTextObjectInterface{Q_OBJECTQ_INTERFACES(QTextObjectInterface)public:QSizeF intrinsicSize(QTextDocument *doc, int posInDocument,const QTextFormat &format){int fontSize = format.property(MainWindow::OP_FontSize).toInt();QString text = format.property(MainWindow::OP_Text).toString();return QSizeF(text.length() * fontSize, fontSize);}void drawObject(QPainter *painter, const QRectF &rect, QTextDocument *doc,int posInDocument, const QTextFormat &format){QString text = format.property(MainWindow::OP_Text).toString();painter->save();painter->setPen(Qt::red);painter->drawText(rect, text);painter->restore();}};

这个DIYTextObjectHandler就是用来处理我们插入进去的标签的,也就是说,这个表情是由这个对象来\"画出来\"的。

接下来要把这个handler注册到TextEidt中:

void MainWindow::setupTextObjectHandler(){QTextDocument* doc = ui->textEdit->document();DIYTextObjectHandler* handler = new DIYTextObjectHandler;handler->setParent(this);doc->documentLayout()->registerHandler(TO_ObjectAt, handler);qDebug() << \"register handler complite.\";}

当程序运行的时候调用这个函数初始化。

然后再我们的插入标签事件当中这样插入标签:

void MainWindow::insertTextObject(){QString text = ui->lineEdit->text();QTextCharFormat format;format.setObjectType(TO_ObjectAt);format.setProperty(OP_Text, QVariant::fromValue(text));format.setProperty(OP_FontSize, QVariant::fromValue(14));ui->textEdit->textCursor().insertText(QString(QChar::ObjectReplacementCharacter),format);qDebug() << \"insert text object: \" << text;}

这样插入了一个标签实现了我们的 At 某人 的UI功能

【领 QT开发教程 学习资料, 点击下方链接莬费领取↓↓ ,先码住不迷路~】

点击这里:

标签:

QTextEdit添加文本对象(将N个文字结合成一个整体)|世界热点

来源:QT教程 2023-05-17 19:03:20

中国移动总经理董昕:中国移动已开通5G基站超155万个

来源:新京报 2023-05-17 18:23:51

口腔黏膜纤维化癌变率怎么算出来的_预防口腔黏膜纤维化癌变的措施_世界观天下

来源:互联网 2023-05-17 18:00:42

网络诽谤司法解释是什么?捏造事实诽谤他人需要负法律责任吗?捏造事实诽谤他人有哪些法律后果?

来源:法律解答网 2023-05-17 17:46:59

天天速讯:大米发糕怎么做才不会发粘

来源:南方养生网 2023-05-17 17:09:26

天天微资讯!哥伦比亚2022年森林砍伐总量或减少10%

来源:中国新闻网 2023-05-17 16:45:39

天天热头条丨多国拟立法要求发布者明确标明美颜照片

来源:环球网 2023-05-17 16:14:07

天天滚动:梦见亲人生病是什么意思(梦见亲人生病是什么意思周公解梦)

来源:互联网 2023-05-17 15:27:42

Portworx by Pure Storage宣布与MongoDB携手合作

来源:中关村在线 2023-05-17 15:11:34

世界聚焦:仲量联行:香港中环商铺空置率连续两季改善 预计下半年租金显著回升

来源:智通财经 2023-05-17 14:43:26

港股异动 | 越南制造加工出口(00422)午后涨超9% 一季度归母溢利同比大幅增长约2.03倍 当前快讯

来源:智通财经网 2023-05-17 14:10:26

林之洋被逼做王妃(林之洋)_每日头条

来源:互联网 2023-05-17 13:14:59

螃蟹里面黑色的是什么东西能吃吗 螃蟹里面黑色的是啥-动态

来源:互联网 2023-05-17 12:27:22

中国第一蛇村在哪里_中国第一蛇村的简介-世界新要闻

来源:互联网 2023-05-17 11:53:43

中国商人泰国酒店开房被刺20余刀身亡,财物被洗劫一空

来源:极目新闻 2023-05-17 11:21:51

5月17日华南地区苯酐市场走势上涨

来源:生意社 2023-05-17 10:51:44

焦点简讯:科左中旗:滴灌带回收变废为宝

来源:内蒙古日报 2023-05-17 10:21:47

当前速递!两部门:支持新能源汽车下乡 提供多元化购买支持政策

来源:中国新闻网 2023-05-17 09:54:24

5月17日恒生指数开盘下跌0.11%_世界快消息

来源:每日经济新闻 2023-05-17 09:33:24

搭载1.5T混动系统 福特蒙迪欧混动版申报图曝光

来源:搜狐科技 2023-05-17 08:55:08

中国经济当前及下阶段均不会通缩

来源:国际商报 2023-05-17 08:09:32

环球滚动:5月16日基金净值:华商甄选回报混合A最新净值1.3343,跌0.42%

来源:证券之星 2023-05-17 07:45:12

电脑进不了桌面如何解决 电脑进不了桌面如何解决方法 当前快报

来源:互联网 2023-05-17 06:39:22

世界球精选!V观财报|四环生物年报被问询:是否存重大经营风险?

来源:中新经纬 2023-05-17 05:50:47

今日聚焦!葡糖-6-磷酸_关于葡糖-6-磷酸的简介

来源:互联网 2023-05-17 04:01:50

用友t 反结账快捷键_用友反结账快捷键

来源:互联网 2023-05-17 00:48:08

长石是什么光泽_长石是什么

来源:互联网 2023-05-16 22:36:59

他说是情怀,你说是真爱 硬派越野车在国内缘何从冷门变热门?|环球观天下

来源:搜狐科技 2023-05-16 21:47:09

离子化合物中可能含有共价键_离子化合物

来源:互联网 2023-05-16 20:49:37

动态焦点:存银行的钱说没就没了!硅谷银行海外分行“存款归零” 谁最受伤

来源:金融投资报 2023-05-16 19:53:35

Copyright   2015-2022 华中知识产权网 版权所有  备案号:京ICP备12018864号-26   联系邮箱:2 913 236 @qq.com