QTextBrowser:如何通过自定义文本表示复制到剪贴板的图像



考虑以下代码:

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转换为纯文本。

相关内容

  • 没有找到相关文章

最新更新