Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Image QTextBrowser:如何表示通过自定义文本复制到剪贴板的图像?_Image_Qt_Clipboard_Qt5_Representation - Fatal编程技术网

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);
    }
  }
}