File indexing completed on 2025-02-16 05:12:12
0001 #include "mtextedit.h" 0002 0003 #include <QTextDocument> 0004 #include <QTextCursor> 0005 #include <QImage> 0006 #include <QByteArray> 0007 #include <QBuffer> 0008 0009 #include <stdlib.h> 0010 0011 0012 MTextEdit::MTextEdit(QWidget *parent) : QTextEdit(parent) { 0013 } 0014 0015 0016 bool MTextEdit::canInsertFromMimeData(const QMimeData *source) const { 0017 return source->hasImage() || QTextEdit::canInsertFromMimeData(source); 0018 } 0019 0020 0021 void MTextEdit::insertFromMimeData(const QMimeData *source) { 0022 if (source->hasImage()) { 0023 QStringList formats = source->formats(); 0024 QString format; 0025 for (int i=0; i<formats.size(); i++) { 0026 if (formats[i] == QStringLiteral("image/bmp")) { format = QStringLiteral("BMP"); break; } 0027 if (formats[i] == QStringLiteral("image/jpeg")) { format = QStringLiteral("JPG"); break; } 0028 if (formats[i] == QStringLiteral("image/jpg")) { format = QStringLiteral("JPG"); break; } 0029 if (formats[i] == QStringLiteral("image/gif")) { format = QStringLiteral("GIF"); break; } 0030 if (formats[i] == QStringLiteral("image/png")) { format = QStringLiteral("PNG"); break; } 0031 if (formats[i] == QStringLiteral("image/pbm")) { format = QStringLiteral("PBM"); break; } 0032 if (formats[i] == QStringLiteral("image/pgm")) { format = QStringLiteral("PGM"); break; } 0033 if (formats[i] == QStringLiteral("image/ppm")) { format = QStringLiteral("PPM"); break; } 0034 if (formats[i] == QStringLiteral("image/tiff")) { format = QStringLiteral("TIFF"); break; } 0035 if (formats[i] == QStringLiteral("image/xbm")) { format = QStringLiteral("XBM"); break; } 0036 if (formats[i] == QStringLiteral("image/xpm")) { format = QStringLiteral("XPM"); break; } 0037 } 0038 if (!format.isEmpty()) { 0039 dropImage(qvariant_cast<QImage>(source->imageData()), QStringLiteral("JPG")); 0040 return; 0041 } 0042 } 0043 QTextEdit::insertFromMimeData(source); 0044 } 0045 0046 0047 QMimeData *MTextEdit::createMimeDataFromSelection() const { 0048 return QTextEdit::createMimeDataFromSelection(); 0049 } 0050 0051 0052 void MTextEdit::dropImage(const QImage& image, const QString& format) { 0053 QByteArray bytes; 0054 QBuffer buffer(&bytes); 0055 buffer.open(QIODevice::WriteOnly); 0056 image.save(&buffer, format.toLocal8Bit().data()); 0057 buffer.close(); 0058 QByteArray base64 = bytes.toBase64(); 0059 QByteArray base64l; 0060 for (int i=0; i<base64.size(); i++) { 0061 base64l.append(base64[i]); 0062 if (i%80 == 0) { 0063 base64l.append("\n"); 0064 } 0065 } 0066 0067 QTextCursor cursor = textCursor(); 0068 QTextImageFormat imageFormat; 0069 imageFormat.setWidth ( image.width() ); 0070 imageFormat.setHeight ( image.height() ); 0071 imageFormat.setName ( QStringLiteral("data:image/%1;base64,%2") 0072 .arg(QStringLiteral("%1.%2").arg(rand()).arg(format)) 0073 .arg(QString::fromLocal8Bit(base64l)) 0074 ); 0075 cursor.insertImage ( imageFormat ); 0076 } 0077