考虑以下代码:
QTextDocument * doc = ui->textBrowser->document();
doc->addResource(QTextDocument::ImageResource, QUrl("img://smiley"), QImage("happy.png"));
QTextCursor cursor = ui->textBrowser->textCursor();
cursor.insertHtml("Sample text ");
cursor.insertImage("img://smiley");
ui->textBrowser->setTextCursor(cursor);
(ui->textBrowser是指向QTextBrowser对象的指针)
当我将图像复制到剪贴板时,它由对象替换字符(U+FFFC)表示。是否可以更改此行为并保存例如":-)"?
请注意,我使用的是Qt 5.2,所以可以使用Qt 5中引入的任何函数。
恐怕没有简单的方法。在web浏览器中,alt
属性会有所帮助,但Qt不支持
您可以跟踪剪贴板的更改并更正其内容。
初始化:
QClipboard* clipboard = QApplication::clipboard();
connect(clipboard, SIGNAL(changed(QClipboard::Mode)),
this, SLOT(clipboard_changed()));
剪贴板校正(示例):
void MainWindow::clipboard_changed() {
QClipboard* clipboard = QApplication::clipboard();
const QMimeData* data = clipboard->mimeData();
QString html = data->html();
if (html.contains("<img src="img://smiley" />")) {
QString new_html = html;
new_html.replace("<img src="img://smiley" />", ":-)");
QTextDocument doc;
doc.setHtml(new_html);
QString text = doc.toPlainText();
if (text != data->text()) {
QMimeData* new_data = new QMimeData();
new_data->setHtml(html);
new_data->setText(doc.toPlainText());
clipboard->setMimeData(new_data);
}
}
}
当然,对于一个真正的程序,您需要更复杂的实现。
我使用QTextDocument
只是为了将HTML转换为纯文本。