标题:请教QTextEdit粘贴网络图片的问题
作者:handeng
日期:2022-10-02 21:51
内容:
大佬们好,本人Qt和C++初学者,想用QTextEdit实现一个富文本编辑器。发现QTextEdit默认不支持粘贴图片,搜了一圈找到了重写insertFromMimeData()虚函数的办法,然后我测试发现粘贴纯图和本地图文时正常,但从网页复制一段图文混合的内容这种图片不在本地的情况下,粘贴进去后图片也不能显示。所以请问如何能够从QMimeData中,拿到图片的URL去下载,并且在段落的正确位置插入对应图片?
附上输出的QMimeData截图,这段数据的hasImage()和hasUrls()都返回false:

#1 [snolkmg 10-08 10:56]
QTextEdit不支持显示网络图片,只能显示本地图片
#2 [onlyone 10-08 13:47]
首先要注意,QTextEdit 必须要设置为 接受富文本模式,否则你的html格式是不能被识别的。
这点很重要。富文本接受模式下,hasImage 会是为真的。
理论上可以识别到url,然后下载,保存到本地。但是不推荐这样做,这样做就很麻烦了,你确定要做一个这么麻烦的程序吗?
简单的做法是,如果是图文混排,只拷贝文字,或者只黏贴给出图片的地址。
大概片段
void MyTextEdit::insertFromMimeData(const QMimeData *source)
{
qDebug() formats();
if (source->hasImage())
{
qDebug() imageData());
img.save(localPicPath);
if (!QFile::exists(localPicPath))
{
return;
}
QUrl localPicUrl = QUrl::fromLocalFile(localPicPath);
document()->addResource(QTextDocument::ImageResource, localPicUrl, img);
textCursor().insertImage(localPicUrl.toString());
//this->insertHtml(QString("").arg(localPicUrl.toString()));
#if 0
..
#3 回 snolkmg 的帖子 [handeng 10-09 16:58]
snolkmg:QTextEdit不支持显示网络图片,只能显示本地图片 (2022-10-08 10:56)
嗯嗯这个我是知道的,所以想先拿到图片的URL,再去下载到本地
#4 回 onlyone 的帖子 [handeng 10-09 17:09]
onlyone:
首先要注意,QTextEdit 必须要设置为 接受富文本模式,否则你的html格式是不能被识别的。
这点很重要。富文本接受模式下,hasImage 会是为真的。
理论上可以识别到url,然后下载,保存到本地。但是不推荐这样做,这样做就很麻烦了,你确定要做一个这么麻烦的程序吗?
.......
感谢大佬提供的思路,我这边确认过acceptRichText是true,应该是Qt只能识别到整体数据是html类型不支持其中的图片,看来“获取图片url—下载—替换url为本地路径”这些功能只能自己实现了,工作量不少还容易出bug