Qt插入图片怎么实现啊,详细一点的教学

怎么在qt中的text edit中插入图片啊,不是在designer中的ui界面下直接插入,而是在转化为py文件后运行出来的text edit中放入我想要的图片

这两篇文章里面写的很详细了, 也有具体的代码,你copy过去直接用:


如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

【以下回答由 GPT 生成】

首先,您可以使用QTextDocument类来操作QTextEdit中的文本内容,包括插入图片。下面是一个简单的代码示例,展示如何通过代码向QTextEdit中插入图片:

from PyQt5.QtWidgets import QApplication, QTextEdit
from PyQt5.QtGui import QTextCursor, QTextImageFormat, QImage

app = QApplication([])

# 创建一个QTextEdit实例
text_edit = QTextEdit()

# 打开图片文件
image_path = "path_to_image.jpg"
image = QImage(image_path)

# 创建一个QTextImageFormat对象
image_format = QTextImageFormat()
image_format.setWidth(image.width())
image_format.setHeight(image.height())
image_format.setName(image_path)

# 获取QTextEdit的文档对象
document = text_edit.document()

# 将图片插入到文档中
cursor = QTextCursor(document)
cursor.insertImage(image_format)

# 显示QTextEdit窗口
text_edit.show()

app.exec_()

以上代码使用PyQt5库来创建一个简单的应用程序窗口,并在其中的QTextEdit中插入一张图片。您需要将"path_to_image.jpg"替换为您要插入的图片的路径。

请注意,嵌入的图片将被保存在文档中,所以当您重新打开文档时图片仍然可见。如果您想移除图片,可以使用QTextCursor中的removeImage()方法。

希望这可以帮助到您!如果您有任何疑问,请随时提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

继承QTextEdit重写dropEvent、canInsertFromMimeData、insertFromMimeData函数实现。

#ifndef MYTEXTEDIT_H
#define MYTEXTEDIT_H

#include <QObject>
#include <QTextEdit>
#include <QDragEnterEvent>
#include <QDropEvent>
#include <QImageReader>
#include <QMimeData>
#include <QFileInfo>
#include <QDebug>

class MyTextEdit : public QTextEdit
{
public:
    MyTextEdit(QWidget *parent = nullptr);

protected:
    void dragEnterEvent(QDragEnterEvent *e);
    void dropEvent(QDropEvent *e);

    bool canInsertFromMimeData(const QMimeData *source) const;
    void insertFromMimeData(const QMimeData *source);
};

#endif // MYTEXTEDIT_H
#include "mytextedit.h"

MyTextEdit::MyTextEdit(QWidget *parent)
{
}

void MyTextEdit::dragEnterEvent(QDragEnterEvent *e)
{
    e->acceptProposedAction();
}

void MyTextEdit::dropEvent(QDropEvent *e)
{
    QString url=e->mimeData()->urls().first().toLocalFile();

    if(e->mimeData()->hasImage())
    {
        //这只是个名字 供后续调用的名字
        QUrl name (QString("file://%1" ).arg (url));

        //获取图片 并插入到光标处
        QImage image = QImageReader(url).read();
        QTextDocument * textDocument = this->document();
        document()->addResource( QTextDocument::ImageResource, name, QVariant (image));

        textCursor().insertImage(name.toString());
    }
    else if (e->mimeData()->hasUrls())
    {
        qDebug()<<"urls-----------------------------";
        foreach (QUrl url, e->mimeData()->urls())
        {
            QFileInfo info(url.toLocalFile());
            if (QImageReader::supportedImageFormats().contains(info.suffix().toLower().toLatin1()))
            {
                QImage image(info.filePath());
                if (!image.isNull())
                {
                    document()->addResource(QTextDocument::ImageResource, url, image);
                    textCursor().insertImage(url.toString());
                }
            }
            else{
                QFile file(url.toLocalFile());
                if(file.open(QIODevice::ReadOnly|QIODevice::Text))
                    textCursor().insertText(file.readAll());
            }

        }
    }else{
        qDebug()<<"insertFromMimeData--------------------";
        QTextEdit::insertFromMimeData(e->mimeData());
    }
}

bool MyTextEdit::canInsertFromMimeData(const QMimeData *source) const
{

    return source->hasImage()||source->hasUrls()||QTextEdit::canInsertFromMimeData(source);
}

void MyTextEdit::insertFromMimeData(const QMimeData *source)
{
    if(source->hasImage())
    {
        qDebug()<<"hasImage-------------------";
        static int i=1;
        QUrl name(QString("imgName_%1").arg(i));
        QImage img=qvariant_cast<QImage>(source->imageData());
        document()->addResource(QTextDocument::ImageResource,name,img);

        textCursor().insertImage(name.toString());
        i++;
    }
    else if (source->hasUrls())
    {
        qDebug()<<"urls-----------------------------";
        foreach (QUrl url, source->urls())
        {
            QFileInfo info(url.toLocalFile());
            if (QImageReader::supportedImageFormats().contains(info.suffix().toLower().toLatin1()))
            {
                QImage image(info.filePath());
                if (!image.isNull())
                {
                    document()->addResource(QTextDocument::ImageResource, url, image);
                    textCursor().insertImage(url.toString());
                }
            }
            else{
                QFile file(url.toLocalFile());
                if(file.open(QIODevice::ReadOnly|QIODevice::Text))
                    textCursor().insertText(file.readAll());
            }

        }
    }else{
        qDebug()<<"insertFromMimeData--------------------";
        QTextEdit::insertFromMimeData(source);
    }
}