File indexing completed on 2024-05-05 17:47:45
0001 #include "mtextedit.h" 0002 #include <QBuffer> 0003 #include <QByteArray> 0004 #include <QImage> 0005 #include <QTextCursor> 0006 #include <QTextDocument> 0007 #include <stdlib.h> 0008 0009 MTextEdit::MTextEdit(QWidget* parent) : QTextEdit(parent) {} 0010 0011 bool MTextEdit::canInsertFromMimeData(const QMimeData* source) const 0012 { 0013 return source->hasImage() || QTextEdit::canInsertFromMimeData(source); 0014 } 0015 0016 void MTextEdit::insertFromMimeData(const QMimeData* source) 0017 { 0018 if(source->hasImage()) 0019 { 0020 QStringList formats= source->formats(); 0021 QString format; 0022 for(int i= 0; i < formats.size(); i++) 0023 { 0024 if(formats[i] == "image/bmp") 0025 { 0026 format= "BMP"; 0027 break; 0028 } 0029 if(formats[i] == "image/jpeg") 0030 { 0031 format= "JPG"; 0032 break; 0033 } 0034 if(formats[i] == "image/jpg") 0035 { 0036 format= "JPG"; 0037 break; 0038 } 0039 if(formats[i] == "image/gif") 0040 { 0041 format= "GIF"; 0042 break; 0043 } 0044 if(formats[i] == "image/png") 0045 { 0046 format= "PNG"; 0047 break; 0048 } 0049 if(formats[i] == "image/pbm") 0050 { 0051 format= "PBM"; 0052 break; 0053 } 0054 if(formats[i] == "image/pgm") 0055 { 0056 format= "PGM"; 0057 break; 0058 } 0059 if(formats[i] == "image/ppm") 0060 { 0061 format= "PPM"; 0062 break; 0063 } 0064 if(formats[i] == "image/tiff") 0065 { 0066 format= "TIFF"; 0067 break; 0068 } 0069 if(formats[i] == "image/xbm") 0070 { 0071 format= "XBM"; 0072 break; 0073 } 0074 if(formats[i] == "image/xpm") 0075 { 0076 format= "XPM"; 0077 break; 0078 } 0079 } 0080 if(!format.isEmpty()) 0081 { 0082 // dropImage(qvariant_cast<QImage>(source->imageData()), format); 0083 dropImage(qvariant_cast<QImage>(source->imageData()), "JPG"); // Sorry, ale cokoli jiného dlouho trvá 0084 return; 0085 } 0086 } 0087 QTextEdit::insertFromMimeData(source); 0088 } 0089 0090 QMimeData* MTextEdit::createMimeDataFromSelection() const 0091 { 0092 return QTextEdit::createMimeDataFromSelection(); 0093 } 0094 0095 void MTextEdit::dropImage(const QImage& image, const QString& format) 0096 { 0097 QByteArray bytes; 0098 QBuffer buffer(&bytes); 0099 buffer.open(QIODevice::WriteOnly); 0100 image.save(&buffer, format.toLocal8Bit().data()); 0101 buffer.close(); 0102 QByteArray base64= bytes.toBase64(); 0103 QByteArray base64l; 0104 for(int i= 0; i < base64.size(); i++) 0105 { 0106 base64l.append(base64[i]); 0107 if(i % 80 == 0) 0108 { 0109 base64l.append("\n"); 0110 } 0111 } 0112 0113 QTextCursor cursor= textCursor(); 0114 QTextImageFormat imageFormat; 0115 imageFormat.setWidth(image.width()); 0116 imageFormat.setHeight(image.height()); 0117 imageFormat.setName( 0118 QString("data:image/%1;base64,%2").arg(QString("%1.%2").arg(rand()).arg(format), base64l.data())); 0119 cursor.insertImage(imageFormat); 0120 }