【发布时间】:2020-09-09 05:46:14
【问题描述】:
我是一个初学者,所以很简单。 :) 我已经用 C++ 编写了我的程序,现在我正在使用 Qt 构建它的 UI。
在程序的一部分中,我有一个 QTextEdit,用户可以复制其内容并将其粘贴到 Word 等文本编辑器中(用于进一步键入、格式化、打印等)。内容是一个表格,其中包含一些单元格中资源文件的一些图像。它是使用 HTML 制作的(我不知道该怎么做)。将它复制到 Word 效果很好,除了图像被粘贴为小的空白方块这一事实(当带有来自网络的图像的随机 HTML 片段被粘贴到 QTextEdit BTW 中时,也会发生同样的事情)。
我无法将图像正确地粘贴到 Word 中(并且没有 - Word 中的 显示图片占位符 选项未选中)。因此,我的问题是 — 如何正确粘贴 QTextEdit 中的 HTML(包含文本和图片)?
相关代码的简化版(:/imgs/imgs/Fonotest16x16.png是资源文件路径):
QString textEditContents = "<html><head/><body><table><tr><td><p>";
textEditContents.append("some QStrings the program made");
textEditContents.append("</p></td><td><p>Some text here <img src=':/imgs/imgs/Fonotest16x16.png'/></p></td>");
textEditContents.append("</tr></table></body></html>");
ui->textEdit->setText(textEditContents);
将 QTextEdit 变形为 QTextBrowser 会得到相同的结果。
我有一种感觉,使用 QMimeData 类可能会起作用,但我是一个初学者,尽管我已经阅读过它,但它太混乱了,我不知道如何使用它。我一直在寻找简单的例子,但我无法弄清楚,所以一个更简单的解决方案会很棒,或者至少是一个如何将它与上面给出的代码一起使用的例子。 :D
(顺便说一句,这里不是本地人,所以如果我的语法不好 - 道歉。)
为了清楚起见,截图如下:
复制:
粘贴:
与此同时,我已经尝试过实现这一点:
QMimeData *data = new QMimeData;
data->setHtml(textEditContents);
QClipboard *clipboard = QGuiApplication::clipboard();
clipboard->setMimeData(data, QClipboard::Mode::Clipboard);
当然,它没有用。事实上,它不会将任何内容复制到剪贴板,它什么也不做。 :D
【问题讨论】:
-
很明显,单词不会显示图像,因为据我了解,您只能复制粘贴文本而不是图像。因此,当文字显示这一行
<img src=':/imgs/imgs/Fonotest16x16.png'/></p></td>时,它会显示空白图像,因为它根本找不到它。你试过不使用资源系统吗?在 QTextEdit 中使用来自网络的图像? -
1.你应该创建QImagedoc.qt.io/qt-5/qimage.html#QImage-8。 2.使用QClipboarddoc.qt.io/qt-5/qclipboard.html#setImage
-
@EligijusPupeikis 好的,但是你怎么能从网络上随机复制一段 HTML 到 Word 中并完美呈现图片呢?我不能使用来自网络的图像,因为那样用户必须有互联网连接才能工作,我不明白。
-
@AndreySemenov 是的,不,我希望用户能够复制带有文本和图像的整个 HTML 表格(是的,图像是重点,但我的意思是整个表格)。您所建议的接缝只会复制图像,而不是其中包含图像的整个 HTML。
-
@Miloš 我唯一的建议是在不将图像放入资源的情况下尝试您正在做的事情。只需直接从文件系统中获取它们。因为 word 或任何其他应用程序无法访问您的应用程序资源中的文件。