它们支持html..所以很容易想到用html实现gif动画...不过很悲剧 在QTextEdit 只能显示gif的第一帧
所以只能手动换帧了!!
用一个QMovie管理gif,每当其换帧后,就手动更新Edit中的图片以此来达到动画的效果
插入图片
edit->insertHtml("<br><br><br><img src='test'/>"); // 此处的test 即 url(图片的索引吧
edit->addAnimation(QUrl("test"), "cat.gif"); //添加一个动画. addAnimation代码: void AnimatedTextEdit::addAnimation(const QUrl& url, const QString& fileName) QFile *file =new QFile(fileName); //读取gif文件 if(!file->open(QIODevice::ReadOnly)){ qDebug()<<" open err"; } if(lstUrl.contains(url)){ //同一个gif 使用同一个movie return; }else{ lstUrl.append(url); } QMovie* movie = new QMovie(this); // movie->setFileName(fileName); movie->setCacheMode(QMovie::CacheNone); lstMovie.append(movie); //获取该movie,以便删除 urls.insert(movie, url); //urls 一个hash //换帧时刷新 connect(movie, SIGNAL(frameChanged(int)), this, SLOT(animate(int))); movie->start(); file->close(); delete file; 与上函数槽向接的函数 void AnimatedTextEdit::animate(int a) { // qDebug()<<"hash count is "<<urls.count(); if (QMovie* movie = qobject_cast<QMovie*>(sender())) { document()->addResource(QTextDocument::ImageResource, //替换图片为当前帧 urls.value(movie), movie->currentPixmap()); setLineWrapColumnOrWidth(lineWrapColumnOrWidth()); // ..刷新显示 } } 其中 addResource函数会将textEdit中的url替换成图片资源,这里我们刚好就是每当gif换帧的时候就替换,以此达到了gif的效果 setLineWrapColumnOrWidth会导致 textEdit重新刷新 要不上面替换的图片,是显示不出来的! demo 下载地址: http://download.csdn.net/source/3206932