2012-04-07 89 views
1

我有一个预先存在的函数,可以生成富文本/ html报告。我的应用在工具提示中显示此报告。我已经加入到这一报告复制到使用类似下面的代码将剪贴板中的能力:使用QClipboard时,如何复制富文本并将其降级为文本编辑器的纯文本?

reportRichText = generateReport() 
    clipboard = QApplication.clipboard() 
    reportRichTextMime = QMimeData() 
    reportRichTextMime.setHtml(reportRichText) 
    clipboard.setMimeData(reportRichTextMime) 

这让我复制的报告,并将其粘贴到任何接受富文本。例如,我可以将报告粘贴到MS Word中。但问题是,我无法将其粘贴到纯文本编辑器中。我只是有一个灰色的“粘贴”选择,好像没有什么可粘贴的。另一个有趣的消息,如果我用MS Word做“粘贴特殊”,我只能选择粘贴为“HTML格式”,没有列出纯文本选项。

当然,如果我只是简单地使用QClipboard复制为纯文本,我可以复制粘贴到任何我想要的地方。不过,我正在复制/粘贴所有标记。这显然是我不想要的。我要么想要富文本,要么没有标记纯文本。

我期望的行为是您从Web浏览器复制/粘贴文本时获得的行为。对于接受富文本的应用程序,粘贴富文本(此外,MS Word将允许您以纯文本或富文本的形式粘贴)。对于纯文本编辑器,将非呈现的纯文本粘贴到纯文本编辑器中。

如何使用QClipboard获取也可作为纯文本粘贴的富文本?

回答

1

我不是很熟悉的Qt还,但一些谷歌搜索它看起来像你需要继承QMimeData,写自己html()text()方法,返回HTML和数据的文本版本,具有formats()方法沿返回text/htmltext/plain作为对象中支持的类型。然后把它放在剪贴板上。

1

嗯,我很确定正确的方法是在QMimeData上调用均为 setText和setHtml。从QT docs for QMimeData

reportRichText = generateReport() 
clipboard = QApplication.clipboard() 
reportRichTextMime = QMimeData() 
reportRichTextMime.setHtml(reportRichText) 
reportRichTextMime.setText("hello!") 
clipboard.setMimeData(reportRichTextMime) 

那么你得到:

,如果你做单QMimeData对象可以使用多种不同的格式在同一时间

IE存储相同的数据

 
hello! 

粘贴到编辑器接受纯文本和我的在编辑接受rtf文本的漂亮报告。这是因为“你好!”是数据的纯文本表示,而我的报告是HTML表示。

对于我的报告,我只是决定回去找出一种方法来生成HTML和纯文本的报告,这不像我想的那样令人讨厌或困难。所以,实际上我现在拥有的是:

reportRichText = generateReport(rtf=True) 
reportPlainText = generateReport(rtf=False) 
clipboard = QApplication.clipboard() 
reportRichTextMime = QMimeData() 
reportRichTextMime.setHtml(reportRichText) 
reportRichTextMime.setText(reportPlainText) 
clipboard.setMimeData(reportRichTextMime) 

,这似乎这样的伎俩

+0

好知道。从阅读文档看,它*听起来像'setText()'将剪辑的类型设置为纯文本,将'setHtml()'设置为HTML,即不能同时使用这两种文本。 – kindall 2012-04-08 02:39:08