首先要注意,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);
    }
}