唐山网站建设开发,做名片最好的网站,2018wordpress 主题,做网站的软件初中生背景QTextEdit中粘贴一大段文字时#xff0c;EasyDraft中粘贴进去的文字们的格式就乱了#xff0c;处于无格式。还有在EasyDraft中选中一些文字进行拖放动作时#xff0c;格式也会混乱。解决这两种都牵涉到QTextEdit粘贴行为#xff0c;我们可以截获剪切板(clipboard)的内容…背景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 DropQTextEdit支持用户自定义的drag和drop行为.默认情况下当用户drop一些纯文本HTML富文本这种MIME数据时QTextEdit会直接插入到文档中。你可以通过重新实现 canInsertFromMimeData() 和 insertFromMimeData() 来支持额外的MIME数据类型例如允许用户拖拽图片到QTextEdit里,你可以这么实现:bool TextEdit::canInsertFromMimeData( const QMimeData *source ) const {if (source-hasImage())return true;elsereturn 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