Image QTextBrowser:如何表示通过自定义文本复制到剪贴板的图像?
考虑以下代码:Image QTextBrowser:如何表示通过自定义文本复制到剪贴板的图像?,image,qt,clipboard,qt5,representation,Image,Qt,Clipboard,Qt5,Representation,考虑以下代码: QTextDocument * doc = ui->textBrowser->document(); doc->addResource(QTextDocument::ImageResource, QUrl("img://smiley"), QImage("happy.png")); QTextCursor cursor = ui->textBrowser->textCursor(); cursor.insertHtml("Sample text ")
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)表示。是否可以更改此行为并改为保存,例如“:-)”
请注意,我使用的是Qt5.2,因此可以使用Qt5中引入的任何函数。恐怕没有简单的方法。在web浏览器中,
alt
属性会有所帮助,但Qt不支持它
您可以跟踪剪贴板的更改并更正其内容
初始化:
QClipboard* clipboard = QApplication::clipboard();
connect(clipboard, SIGNAL(changed(QClipboard::Mode)),
this, SLOT(clipboard_changed()));
剪贴板更正(示例):
void主窗口::剪贴板\u已更改(){
QClipboard*clipboard=QApplication::clipboard();
常量QMimeData*数据=剪贴板->mimeData();
QString html=data->html();
if(html.contains(“”){
QString new_html=html;
新的html.replace(“,”:-)”;
QTextDocument文档;
doc.setHtml(新的html);
QString text=doc.toPlainText();
如果(text!=数据->text()){
QMimeData*新数据=新QMimeData();
新建数据->设置html(html);
新建数据->设置文本(doc.toPlainText());
剪贴板->setMimeData(新数据);
}
}
}
当然,对于真正的程序,您需要更复杂的实现
我使用QTextDocument
只是将HTML转换为纯文本
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);
}
}
}