如何将QTextEdit的RichText富文本内容以纯文本格式返回?
解决方案
第一种是最直接的修改方法,利用QTextEdit原生的toPlainText()接口,直接替换你现有代码里的text()即可:
void WidgetName::onClipboardCopy() { if ( TextEdit->hasSelectedText() ) { TextEdit->copy(); } else { QClipboard * xClipboard = QApplication::clipboard(); // 替换text()为toPlainText()即可直接获取无HTML标签的纯文本 xClipboard->setText( TextEdit->toPlainText() ); } }
toPlainText()是Qt为富文本编辑组件提供的原生方法,会自动过滤所有HTML格式标签,保留文本内容和换行、缩进等基础排版,不需要自己实现HTML解析逻辑。
第二种方案可以对齐系统默认复制行为,无选中时先全选内容,再调用原生copy()方法,复制完成后取消选中即可。这种方法的优势是剪贴板会同时存入富文本和纯文本两种格式,粘贴到支持富文本的编辑器时可以保留原有格式,粘贴到纯文本场景时自动展示纯文本,和QTextEdit默认的选中复制行为完全一致:
void WidgetName::onClipboardCopy() { if ( TextEdit->hasSelectedText() ) { TextEdit->copy(); } else { // 临时全选内容 TextEdit->selectAll(); // 调用原生copy接口,同时写入富文本、纯文本到剪贴板 TextEdit->copy(); // 清空选中状态,还原界面表现 QTextCursor cursor = TextEdit->textCursor(); cursor.clearSelection(); TextEdit->setTextCursor(cursor); } }
如果是需要对任意HTML字符串做通用纯文本提取,也可以借助QTextDocument实现:
QString htmlToPlainText(const QString& html) { QTextDocument doc; doc.setHtml(html); return doc.toPlainText(); }
内容的提问来源于stack exchange,提问作者korksz
相关产品推荐
相关产品推荐

