QTextEdit 当中添加图片的几种方式

http://stackoverflow.com/questions/3254652/several-ways-of-placing-an-image-in-a-qtextedit

(1)I  think this is a very simple question, but when I copy an image I can't paste it in a QTextEdit? Paste is inactive! Also I would like to know how to drag-and-drop a picture.

BTW I use the following code in order to insert a picture into a QTextEdit:

 

            QTextEdit *textEditor = new QTextEdit(0); 
            QTextDocumentFragment fragment; 
            fragment = QTextDocumentFragment::fromHtml("<img src='C:\\aaa.jpg'>"); 
           textEditor->textCursor().insertFragment(fragment); 
           textEditor->setVisible(true); 
(2)

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); 
 } 
(3)

The third way is to inherit QTextEdit and reimplement bool canInsertFromMimeData(const QMimeData* source) const and void insertFromMimeData(const QMimeData* source) functions as followes. Buy the way this method allows to use drag-and-drop or copy-paste mechanisms.

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());      }  }; 

Just wanted to share what I find during long investigation :).

猜你喜欢

转载自blog.csdn.net/r5014/article/details/72434101
今日推荐