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 :).

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
QTextEdit添加图片,可以使用QTextCursor类来设置光标位置并插入图片。下面是一个示例代码: ```python from PyQt5.QtWidgets import QTextEdit from PyQt5.QtGui import QTextCursor, QTextImageFormat, QImage class MyTextEdit(QTextEdit): def __init__(self, parent=None): super().__init__(parent) def insertImage(self, imagePath, width=100, height=100): cursor = self.textCursor() image = QImage(imagePath) imageFormat = QTextImageFormat() imageFormat.setWidth(width) imageFormat.setHeight(height) imageFormat.setName(imagePath) cursor.insertImage(imageFormat) ``` 在上面的代码中,我们定义了一个MyTextEdit类,它继承自QTextEdit。我们添加了一个名为insertImage的方法,该方法接受一个图像路径和图像大小,并将图像插入到当前光标位置。在方法中,我们使用QTextCursor类获取当前光标位置,并使用QTextImageFormat类设置插入的图像的大小和名称。最后,我们调用insertImage方法将图像插入到光标位置。 你可以使用以下代码来测试MyTextEdit类: ```python from PyQt5.QtWidgets import QApplication, QMainWindow import sys if __name__ == '__main__': app = QApplication(sys.argv) mainWindow = QMainWindow() textEdit = MyTextEdit() mainWindow.setCentralWidget(textEdit) mainWindow.show() textEdit.insertImage('image.png', 200, 200) sys.exit(app.exec_()) ``` 在上面的代码中,我们创建了一个主窗口,并将MyTextEdit实例设置为中央窗口部件。我们还在MyTextEdit实例中插入了一个200x200像素的图像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值