背景

QTextEdit中粘贴一大段文字时,EasyDraft中粘贴进去的文字们的格式就乱了,处于无格式。还有在EasyDraft中选中一些文字进行拖放动作时,格式也会混乱。

解决

这两种都牵涉到QTextEdit粘贴行为,我们可以截获剪切板(clipboard)的内容,然后自行修改调整格式,再手动插入到QTextEdit中。正好,QTextEdit提供了对应的保护成员函数:insertMimeData()

virtual void insertFromMimeData( const QMimeData * source)

于是我们重现实现该函数

void EDTextEdit::insertFromMimeData( const QMimeData *source) {

if (source->hasText() ) {

QString context = source->text();

QStringList conList = context.split("\n");

QTextCursor cursor = this->textCursor();

int origState = cursor.block().userState();

for (int i = 0; i < conList.length(); ++i) {

cursor.insertBlock(/* 格式设置在此 */);

cursor.insertText(conList[i]); //插入文本内容

cursor.block().setUserState(origState);

}

}

}

20130118补充:

这样在编辑框中复制粘贴本身的内容,原有的剧本元素格式也全部被弄成了光标处的格式了,所以我们应该判断一下,如果内容包含了剧本格式,那么就执行默认粘贴行为。

怎样判断该内容包含了剧本格式呢,我们使用source->formats()函数,打印出了当这种情况时,格式列表,放回内容为("text/html", "application/vnd.oasis.opendocument.text", "text/plain"),这里的"application/vnd.oasis.opendocument.text"应该就是我们的格式,所有若source的格式包含了该格式,就执行默认行为

void EDTextEdit::insertFromMimeData( const QMimeData *source) {

if (source->hasText() && !source->hasFormat("application/vnd.oasis.opendocument.text")) {

// 修改格式并插入到文档中,代码同上

} else {

// 默认行为

QTextEdit::insertFromMimeData(source);

}

}

说一下这个QMimeData的hasFormat()函数,给它一个Qt识别的格式的字符串,比如"text/plain","text/html","text/uri-list", "application/x-qt-image"等等,你可以使用QMimeData::formats()函数来查看。

Qt文档中的说明

Drag and Drop

QTextEdit支持用户自定义的drag和drop行为.

默认情况下,当用户drop一些纯文本,HTML,富文本这种MIME数据时,QTextEdit会直接插入到文档中。

你可以通过重新实现 canInsertFromMimeData() 和 insertFromMimeData() 来支持额外的MIME数据类型

例如,允许用户拖拽图片到QTextEdit里,你可以这么实现:

bool TextEdit::canInsertFromMimeData( const QMimeData *source ) const {

if (source->hasImage())

return true;

else

return QTextEdit::canInsertFromMimeData(source);

}

这样,使其返回true,我们就增加支持了image MIME types. 其他的MIME类型,我们使用默认的实现.

void TextEdit::insertFromMimeData( const QMimeData *source ) {

if (source->hasImage()) {

QImage image = qvariant_cast(source->imageData());

QTextCursor cursor = this->textCursor();

QTextDocument *document = this->document();

document->addResource(QTextDocument::ImageResource, QUrl("image"), image);

cursor.insertImage("image");

}

}

我们从QVariant中解包图像数据,并把它作为一个resource插入到文档中。

Powered by Sublog

qtextedit 默认文案_QTextEdit的paste相关推荐

  1. qtextedit 默认文案_QTextEdit类(老九学堂C++会员友情翻译,不喜勿喷)

    标记内返回文本. 注意:仅当font-size未设置为固定大小时,才放大HTML文档. Using QTextEdit as an Editor - 使用QTextEdit作为编辑器 有关将QText ...

  2. qtextedit 默认文案_强大的QTextEdit功能 -

    int QTextEdit::linesOfParagraph ( int para ) const 返回para段落的行数,或者如果在para索引没有这个段落,返回-1. bool QTextEdi ...

  3. qtextedit 默认文案_QT中常用的控件说明.md

    2主窗口类型 有三种窗口 QMainWindow QWiget QDialog QMainWindow:可以包含菜单栏,工具栏和标题栏,是 最常见的窗口显示形式. QDialog:是对话窗口的基类.没 ...

  4. qtextedit 默认文案_QT-纯代码控件-QSplitter(分裂器)

    版权声明:本文为博主原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_41488943/article/de ...

  5. qtextedit 默认文案_Qt设置QTextEdit和QLabel的字体颜色 | 学步园

    Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); connec ...

  6. qtextedit固定内容_QTextEdit详细操作

    一.QTextEdit特性 QTextEdit是一个高级的WYSIWYG(What You See Is What You Get所见即所得)编辑/查看器,支持使用HTML4标签子集的富文本格式. Q ...

  7. qt 在qtextedit显示数组_qtextedit获取内容

    QT中怎样提取QTextEdit文本框中的内容? 我这样写的 QString stri; stri=text->toPlainText(); 但我发现文本框中QT中提取QTextEdit文本框中 ...

  8. qtextedit固定内容_QTextEdit选中某行文本

    QTextEdit选中某行文本 因为要做一个RPG游戏里的那种对白显示模块,由于每页能显示的篇幅是有限的,所以需要知道每页显示哪些文字.而这就需要知道一行能显示哪些文字. 在网上查了查相关的解决方法, ...

  9. Paste for Mac(剪切板历史管理工具)

    Paste for Mac 是一款运行在Mac OS 平台上的剪切板小工具,拥有华丽的界面效果,剪切板每一条记录可显示(预览)文本,图片等记录的完整内容,可以记录最近指定条数的剪切板信息,方便用户随时 ...

最新文章

  1. 里海水位上升的原因_汽轮机真空下降的原因及处理
  2. 如何短时间提高python面向对象_初识Python面向对象阶段,你们都是怎么过来的?
  3. 关于阿里基础设施,你要知道的都在这里
  4. python线程退出_python子线程退出及线程退出控制的代码
  5. 信息收集——指纹识别
  6. 初始化创建画布_使用HTML5,画布和开放数据创建全球降水(雨)可视化
  7. java service 事物_Service 事务(JdbcUtils 升级)
  8. 测试需求分析第二部分
  9. c c++ sizeof
  10. 锐捷服务器虚拟化技术_网络设备-锐捷-交换机(S8607E)VSU虚拟化终结配置篇
  11. IE设置每次打开时都清除缓存
  12. 《编程珠玑》-- 开篇:BitMap算法用于磁盘文件排序的原理与实现
  13. Hasor-RSF —— 分布式服务框架
  14. 如何策划新闻营销的主题?
  15. 安卓手机分辨率修改工具的使用方法
  16. line-height含义
  17. Jmeter中参数化的使用
  18. A. Chess Placing
  19. 项目实战!用爬虫和Flask打造属于自己的电影网站
  20. 微信小程序之会议预约管理系统(含源码+论文+答辩PPT等)

热门文章

  1. 课堂上老师不讲的有趣物理知识,才是孩子最感兴趣的!
  2. 我们是否能信任算法?不信任又能怎么办?
  3. 人类繁荣的数学:数学的哈欠
  4. 2021年第3周人工智能方向的周报
  5. 标签分布学习相关研究
  6. An Energy-Efficient Ant-Based Routing Algorithm for Wireless Sensor Networks (无线传感网中一种基于蚁群算法的能量有效路由)
  7. DButils工具使用笔记以及常见问题总结
  8. 【转载保存】Java丨jsoup网络爬虫登录得到cookie并带上cookie访问
  9. python调用shell脚本
  10. 当云原生遇到混合云:如何实现“求变”与“求稳”的平衡