QTextEdit添加文本对象(将N个文字结合成一个整体)
来源:互联网 发布:淘宝店铺描述大全 编辑:程序博客网 时间:2024/06/05 06:09
在处理文字的时候我们有时候不得不这样做:“当输入譬如:@人民日报 这样的标记的时候,我希望 [@人民日报] 这几个字符是一个整体, 不能对其中的任意一个字符进行修改
要改也只能改整体。” 类似于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_OBJECT Q_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功能
阅读全文
0 0
- QTextEdit添加文本对象(将N个文字结合成一个整体)
- QTextEdit/QTextBrowser添加彩色文字与图片
- 向QTextEdit/QTextBrowser添加彩色文字与图片
- .net将一个DataTable拆分成n个DataTable
- 如何用正则将多个空格看成一个空格结合spllit()方法将文本数据入库
- 通过输入cmd命令提示符将txt多个文本合并成一个文本
- Java实现:n个正整数,将它们连接成一排,组成一个最大的多位整数。(输入:n(n个整数),依次输入n个整数)
- QTextEdit选择文本
- QTextEdit限制文本长度
- QTextEdit选择文本
- QTextEdit中添加图片
- 从一个目录中返回n个随机文件名或子目录名(可用于遍历一次文本,返回n行随机的文本行)
- QTextEdit/QPlainTextEdit添加文字超出视图后,滚动条自动移至最底部
- 设有n个正整数,将他们连接成一排,组成一个最小的多位整数
- 设有n个正整数,将他们连接成一排,组成一个最大的多位整数。
- 设有n个正整数,将他们连接成一排,组成一个最大的多位整数
- 将一个n元一维向量向左翻转i个位置的算法(一)
- 将一个n元一维向量向左翻转i个位置的算法(二)
- (OK) Android-x86-7.1.1
- 16.字符串加密解密
- apt-cache
- 使用Python的数据类型(1)
- Android Studio Mac 下的卸载
- QTextEdit添加文本对象(将N个文字结合成一个整体)
- 一、并发编程的挑战
- angularJS与后台连接方法
- des加密解密工具类
- js将毫秒转换成指定格式的日期时间
- jQuery实现仿微博发布框字数提示
- Android4.2.2多媒体架构MediaPlay的创建过程分析(二):解析器的创建
- 编程网站
- HIS系统门急诊医保实时结算接口测试