QTextEdit的使用

第一次比较深入地使用QTextEdit,发现里面的内容十分丰富,官方文档释义:
The QTextEdit class provides a widget that is used to edit and display both plain and rich text(用于编辑和显示纯文本和富文本)
所以能做很多的事情,现在把我的使用收获记录下来,才疏学浅,多多指教,话不多说,直接进入主题

  1. 所属头文件
#include <QTextEdit>
  1. 初始化
// 指定parent:能让parent自动回收内存,否则需要自己手动释放  ----防止内存泄漏
QTextEdit *text_edit = new QTextEdit(parent);
  1. 添加文字
QString add_text = u8"添加文字";
// 第一种方式: append(const QString &text)   --最普通的添加方式,在文本内容后面添加新的文本内容
text_edit->append(add_text);

// 第二种方式:insertText(const QString &text)    --比较灵活的添加方式,可以在textEdit框内任何位置添加文本
// 获取当前textEdit文本块中光标位置,可以随意调动位置,在调动的位置添加文本    --QTextCursor的使用详解在后面的文章介绍
QTextCursor cursor = text_edit->textCursor();
// 设置添加的文字的样式    --注意:设置文字样式后,后面添加的文字,如果没有选择样式,默认使用现在添加的字体样式
// 添加的文字:字体颜色:红色;字体:"微软雅黑";字体大小:16px
QTextCharFormat char_format;
char_format.setForeground(Qt::red);
char_format.setFontFamily(u8"微软雅黑");
char_format.setFontPointSize(16);
cursor.insertText(add_text, char_format);
// 移动光标在起始位置,在起始位置添加文本信息
cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor);
cursor.insertText(add_text);
// 移动光标在结束位置,在结束位置添加文本信息
cursor.movePosition(QTextCursor::End, QTextCursor::MoveAnchor);
cursor.insertText(add_text);
// 移动光标在任意位置(距离左边第四个文本块位置),添加文本信息
cursor.movePosition(QTextCursor::Left, QTextCursor::MoveAnchor, 4);
cursor.insertText(add_text);
// ......其他依次类推

// 第三种方式:insertHtml(const QString &html)    --能添加h5格式的文本内容
// 显示字体大小为12px、颜色为红色
add_text = u8"<font size=\"12px\" color=\"red\">添加文字</font>"
cursor.insertHtml(add_text);
// 显示为 谷歌翻译 的链接    --注意:链接的打开,需要自己写相应的响应函数
add_text = u8"<a href = \"https://translate.google.cn\"></a>"
cursor.insertHtml(add_text);
  1. 添加图片
QString add_img_path = u8"d:\\蜘蛛侠_平行世界.png";
// 第一种方式: insertImage(const QString &name)    
// 直接通过文件路径加载图片
cursor.insertImage(add_img_path);

// 第二种方式: insertImage(const QImage &image, const QString &name = QString())     
// 如果有已经存在的image对象,可以直接加载image对象,不依赖于路径
QImage add_img(add_img_path);
cursor.insertImage(add_img, add_img_path);  //后面add_img_path可以不传

// 第三种方式: insertImage(const QTextImageFormat &format)
// 能对添加的图片做一些属性的处理,比如高度、宽度......
text_edit->document()->addResource(QTextDocument::ImageResource, QUrl(":/Images/qq"),  QVariant(image));
QTextImageFormat img_format;
img_format.setName(add_img_path);
img_format.setWidth(100);
img_format.setHeight(100);
cursor.insertImage(img_format);

// 第四种方式:insertHtml(const QString &html)
// 用h5的文本格式加载图片 可以使用h5文本来设置图片的各个属性
QString add_text = QString("<img src=\"%1\" width=\"100\" height=\"100\">").arg(add_img_path);
ui->textEdit->textCursor().insertHtml(add_text);
  1. 插入动态图(gif图片)
QString add_img_path = u8"d:\\蜘蛛侠_平行世界.gif";
// 先以图片的方式,载入图片
text_edit->document()->addResource(QTextDocument::ImageResource, QUrl(add_img_path),  QVariant(image));
QTextImageFormat img_format;
img_format.setName(add_img_path);
img_format.setWidth(100);
img_format.setHeight(100);
cursor.insertImage(img_format);
// 用QMovie类对gif图片进行循环播放
QMoive* movie = new QMoive(this);
movie->setFileName(add_img_path );
// 关联movie跑起来帧数变化,来显示每一帧图片
connect(movie, &QMovie::frameChanged, this, [this, url](int num){
    //使用QMovie中的当前帧替换掉富文本中的图片元素
	QMovie* movie = qobject_cast<QMovie*>(sender());
	this->text_edit->document()->addResource(QTextDocument::ImageResource, url, movie->currentImage());
	this->text_edit->setLineWrapColumnOrWidth(lineWrapColumnOrWidth());
});
// 开始让动画跑起来
movie->start();
  1. 获取QTextEdit中的内容
// 获取文本内容
QString info = text_edit->toPlainText();
// 如果有很复杂的富文本,遍历富文本内容,解析出自己的数据
QTextDocument* doc = text_edit->document();
// 获取每一个段落
QTextBlock cur_block = doc->begin();
while (cur_block.isValid())
{
	// 获取每一个分段
	for (QTextBlock::iterator iter = cur_block.begin(); iter != cur_block.end(); iter++)
	{
		QTextFragment cur_fragment = iter.fragment();
		QTextFormat format = cur_fragment.charFormat();
		if (format.isImageFormat())
		{
			// 图片信息
			QTextImageFormat img_format = format.toImageFormat();
			// 图片的本地路径
			QString img_path = img_format.stringProperty(QTextFormat::ImageName)
		}
		else if (format.isCharFormat())
		{
			// 文本内容
			QString info = cur_fragment.text();
		}
		......
	}
	cur_block = cur_block.next();
}

QTextEdit还是比较复杂的一个控件,使用的越多,就会发现它有嘿强大的功能以及嘿多的坑…

  • 20
    点赞
  • 103
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值