2019-06-12

Insert an image into a QTextEdit

1. Using html tag


[code lang="cpp"]
QTextEdit *textEditor = new QTextEdit(0);
QTextDocumentFragment fragment;
fragment = QTextDocumentFragment::fromHtml("");
textEditor->textCursor().insertFragment(fragment);
textEditor->setVisible(true);[/code]

2. Using QTextDocument's resource



[code lang="cpp"]
QString file = QFileDialog::getOpenFileName(this, tr("Select an image"),
".", tr("Bitmap Files (*.bmp)
"
"JPEG (*.jpg *jpeg)
"
"GIF (*.gif)
"
"PNG (*.png)
"));
QUrl Uri ( file );
QImage image = QImageReader ( file ).read();
QTextDocument * textDocument = m_textEdit->document();
textDocument->addResource( QTextDocument::ImageResource, Uri, QVariant ( image ) );
QTextCursor cursor = m_textEdit->textCursor();
QTextImageFormat imageFormat;
imageFormat.setWidth( image.width() );
imageFormat.setHeight( image.height() );
imageFormat.setName( Uri.toString() );
cursor.insertImage(imageFormat);
[/code]

3. Subclass QTextEdit (The example below also enabled drag & drop)



[code lang="cpp"]
class TextEdit : public QTextEdit

public:
bool canInsertFromMimeData(const QMimeData* source) const

return source->hasImage()
void 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);


private:
void dropImage(const QUrl& url, const QImage& image)

if (!image.isNull())

document()->addResource(QTextDocument::ImageResource, url, image);
textCursor().insertImage(url.toString());


void dropTextFile(const QUrl& url)
QIODevice::Text))
textCursor().insertText(file.readAll());

;
[/code]

没有评论:

发表评论