首先要注意,QTextEdit 必须要设置为 接受富文本模式,否则你的html格式是不能被识别的。
这点很重要。富文本接受模式下,hasImage 会是为真的。
理论上可以识别到url,然后下载,保存到本地。但是不推荐这样做,这样做就很麻烦了,你确定要做一个这么麻烦的程序吗?
简单的做法是,如果是图文混排,只拷贝文字,或者只黏贴给出图片的地址。
大概片段
void MyTextEdit::insertFromMimeData(const QMimeData *source)
{
qDebug() << source->formats();
if (source->hasImage())
{
qDebug() << "hasImage-------------------" << source->text();
QDate date = QDate::currentDate();
QTime time = QTime::currentTime();
QString localPicPath(QString("%1/%2_%3.png").arg(m_picDirPath).arg(date.toString("yyyy-MM-dd")).arg(time.toString("hh-mm-ss")));
QImage img = qvariant_cast<QImage>(source->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("<img src=\"%1\" />").arg(localPicUrl.toString()));
#if 0
QTextImageFormat imageFormat;
imageFormat.setName(localPicUrl.toString());
textCursor().insertImage(imageFormat);
#endif
}
//这里需要UI上面接受富文本才行。从编辑框拷贝的图片,是html的格式。
//必须要编辑框接受富文本,才能处理html格式的图片拷贝。否则编辑框中的图片,可以拷贝到qq界面,但是不能拷贝到本编辑框中
/*else if (source->hasHtml())
{
qDebug() << source->html();
QTextEdit::insertFromMimeData(source);
}*/
/*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 {
QTextEdit::insertFromMimeData(source);
}
}