#include "mtextedit.h" #include #include #include #include #include #include MTextEdit::MTextEdit(QWidget* parent) : QTextEdit(parent) { } bool MTextEdit::canInsertFromMimeData(const QMimeData* source) const { return source->hasImage() || QTextEdit::canInsertFromMimeData(source); } void MTextEdit::insertFromMimeData(const QMimeData* source) { if (source->hasImage()) { QStringList formats = source->formats(); QString format; for (int i = 0; i < formats.size(); i++) { if (formats[i] == "image/bmp") { format = "BMP"; break; } if (formats[i] == "image/jpeg") { format = "JPG"; break; } if (formats[i] == "image/jpg") { format = "JPG"; break; } if (formats[i] == "image/gif") { format = "GIF"; break; } if (formats[i] == "image/png") { format = "PNG"; break; } if (formats[i] == "image/pbm") { format = "PBM"; break; } if (formats[i] == "image/pgm") { format = "PGM"; break; } if (formats[i] == "image/ppm") { format = "PPM"; break; } if (formats[i] == "image/tiff") { format = "TIFF"; break; } if (formats[i] == "image/xbm") { format = "XBM"; break; } if (formats[i] == "image/xpm") { format = "XPM"; break; } } if (!format.isEmpty()) { // dropImage(qvariant_cast(source->imageData()), format); dropImage(qvariant_cast(source->imageData()), "JPG"); // Sorry, ale cokoli jiného dlouho trvá return; } } QTextEdit::insertFromMimeData(source); } QMimeData* MTextEdit::createMimeDataFromSelection() const { return QTextEdit::createMimeDataFromSelection(); } void MTextEdit::dropImage(const QImage& image, const QString& format) { QByteArray bytes; QBuffer buffer(&bytes); buffer.open(QIODevice::WriteOnly); image.save(&buffer, format.toLocal8Bit().data()); buffer.close(); QByteArray base64 = bytes.toBase64(); QByteArray base64l; for (int i = 0; i < base64.size(); i++) { base64l.append(base64[i]); if (i % 80 == 0) { base64l.append("\n"); } } QTextCursor cursor = textCursor(); QTextImageFormat imageFormat; imageFormat.setWidth(image.width()); imageFormat.setHeight(image.height()); imageFormat.setName(QString("data:image/%1;base64,%2") .arg(QString("%1.%2").arg(rand()).arg(format)) .arg(base64l.data())); cursor.insertImage(imageFormat); }