怎么在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);
}
}