c++ - una - insertar imagen html url
Varias formas de colocar una imagen en un QTextEdit (1)
Creo que esta es una pregunta muy simple, pero cuando copio una imagen no puedo pegarla en un QTextEdit. Pegar está inactivo! También me gustaría saber cómo arrastrar y soltar una imagen.
Por cierto, utilizo el siguiente código para insertar una imagen en un QTextEdit:
QTextEdit *textEditor = new QTextEdit(0);
QTextDocumentFragment fragment;
fragment = QTextDocumentFragment::fromHtml("<img src=''C://aaa.jpg''>");
textEditor->textCursor().insertFragment(fragment);
textEditor->setVisible(true);
¿Se recomienda? ¿Cómo se hace esta operación?
La segunda forma es esta:
void TextEdit::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 Uri ( QString ( "file://%1" ).arg ( 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);
}
La tercera forma es heredar QTextEdit y canInsertFromMimeData
insertFromMimeData
funciones canInsertFromMimeData
e insertFromMimeData
siguiente manera. Por cierto, este método permite utilizar los mecanismos de arrastrar y soltar o copiar y pegar.
class TextEdit : public QTextEdit
{
public:
bool canInsertFromMimeData(const QMimeData* source) const
{
return source->hasImage() || source->hasUrls() ||
QTextEdit::canInsertFromMimeData(source);
}
void insertFromMimeData(const QMimeData* source)
{
if (source->hasImage())
{
static int i = 1;
QUrl url(QString("dropped_image_%1").arg(i++));
dropImage(url, qvariant_cast<QImage>(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)
{
QFile file(url.toLocalFile());
if (file.open(QIODevice::ReadOnly | QIODevice::Text))
textCursor().insertText(file.readAll());
}
};
Solo quería compartir lo que he encontrado durante una larga investigación :).