Qt QTextEdit 使用拖放、复制、粘贴进行文本或图像的插入

您所在的位置:网站首页 可以粘贴图片的记事本 Qt QTextEdit 使用拖放、复制、粘贴进行文本或图像的插入

Qt QTextEdit 使用拖放、复制、粘贴进行文本或图像的插入

2024-07-04 04:53| 来源: 网络整理| 查看: 265

使用QTextEdit建立一个简单地文本编译器,可以实现文字和图片的混编。

插入文字当然没什么问题,QTextEdit也直接可以复制粘贴文字。但是对于插入图片怎么办呢?

方案一:单击一个按钮,选择一张图片,将图片插入到光标位置。

void QcTextEdit::insertImage() { QString file = QFileDialog::getOpenFileName(this, tr("Select an image"), ".", tr("Bitmap Files (*.bmp)\n" "JPEG (*.jpg *jpeg)\n" "GIF (*.gif)\n" "PNG (*.png)\n")); QUrl url ( QString ( "file://%1" ).arg ( file ) ); QImage image = QImageReader ( file ).read(); QTextDocument * textDocument = m_textEdit->document(); textDocument->addResource( QTextDocument::ImageResource, url, QVariant ( image ) ); QTextCursor cursor = m_textEdit->textCursor(); QTextImageFormat imageFormat; imageFormat.setWidth( image.width() ); imageFormat.setHeight( image.height() ); imageFormat.setName( url.toString() ); cursor.insertImage(imageFormat); }

方案二:第一种方法,能达到要求,不过不够方便,只能单击选择图片,有没有可以复制粘贴或者直接拖图片就能插入呢?

bool QcTextEdit::canInsertFromMimeData(const QMimeData *source) const { return source->hasImage() || source->hasUrls() || QTextEdit::canInsertFromMimeData(source); } void QcTextEdit::insertFromMimeData(const QMimeData *source) { if (source->hasImage()) { static int i = 1; QUrl url(QString("dropped_image_%1").arg(i++)); dropImage(url, qvariant_cast(source->imageData())); } else if (source->hasUrls()) { foreach (QUrl url, source->urls()) { QFileInfo info(url.toLocalFile()); if (QImageReader::supportedImageFormats().contains(info.suffix().toLower().toLatin1())) dropImage(url, QImage(info.filePath())); else dropTextFile(url); } } else { QTextEdit::insertFromMimeData(source); } } void QcTextEdit::dropImage(const QUrl &url, const QImage &image) { if (!image.isNull()) { document()->addResource(QTextDocument::ImageResource, url, image); textCursor().insertImage(url.toString()); } } void QcTextEdit::dropTextFile(const QUrl &url) { QFile file(url.toLocalFile()); if (file.open(QIODevice::ReadOnly | QIODevice::Text)) textCursor().insertText(file.readAll()); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3