• 4496阅读
  • 6回复

zhengtianzuo系列-QTextEdit中插入Gif动画并显示 [复制链接]

上一主题 下一主题
离线zhengtianzuo
 

只看楼主 倒序阅读 楼主  发表于: 2017-09-30
早期我设计的IM消息输入框
开始采用的是RichEdit2.0, MFC环境下的. Gif的显示采用在RichEdit中嵌入ActiveX的方式, 现在想想也是很疯狂的事....
后来采用的是Qt Widgets中的QTextEdit, QTextEdit是支持html语言的, 所以可以直接通过调用insertHtml插入静态图片, 动态的Gif图呢?
其实也就是需要循环播放Gif中的多帧图片而已. 而QMovie是可以管理和播放Gif文件的. 官方的例子是这样的:


QLabel label;
QMovie *movie = new QMovie("animations/fire.gif");
label.setMovie(movie);movie->start();


那么我们可以这么实现, 直接上代码:


//插入Html描述的图片
insertHtml("<img src='" + url.toString() + "'/>");
//判断是否是相同的图片
if (m_lstUrls.contains(url)){return;}else{m_lstUrls.append(url);}
//创建QMovie以显示Gif
QMovie* movie = new QMovie(this);
movie->setFileName(fileName);
movie->setCacheMode(QMovie::CacheNone);
m_hasUrls.insert(movie, url);
//绑定帧切换信号槽
connect(movie, SIGNAL(frameChanged(int)), this, SLOT(subAnimate(int)));
movie->start();

然后每当frameChanged被触发的时候就调用subAnimate




//使用QMovie中的当前帧替换掉富文本中的图片元素
QMovie* movie = qobject_cast<QMovie*>(sender());
document()->addResource(QTextDocument::ImageResource,m_hasUrls.value(movie), movie->currentPixmap());
setLineWrapColumnOrWidth(lineWrapColumnOrWidth());



这样就是循环刷新显示gif动画的每一帧了







需要完整代码请访问 QtWidgetsExamples

博客地址: https://blog.csdn.net/zhengtianzuo06
Github: https://github.com/zhengtianzuo
个人产品: https://github.com/zhengtianzuo/Silk
产品网站: http://www.camelstudio.cn
离线圣域天子

只看该作者 1楼 发表于: 2017-09-30
很原始的技术了,它的CPU占用率非常高,根本不实用
离线zhengtianzuo

只看该作者 2楼 发表于: 2017-09-30
回 圣域天子 的帖子
圣域天子:很原始的技术了,它的CPU占用率非常高,根本不实用 (2017-09-30 17:07) 

确实 目前我采用的是WebEngine的方式了, 后续会分享出来.
博客地址: https://blog.csdn.net/zhengtianzuo06
Github: https://github.com/zhengtianzuo
个人产品: https://github.com/zhengtianzuo/Silk
产品网站: http://www.camelstudio.cn
离线liuchangyin

只看该作者 3楼 发表于: 2017-10-01
离线hehui

只看该作者 4楼 发表于: 2017-10-10
回 zhengtianzuo 的帖子
zhengtianzuo:确实 目前我采用的是WebEngine的方式了, 后续会分享出来. (2017-09-30 17:22) 

WebEngine要带一个巨大的库。。。。。
离线zhengtianzuo

只看该作者 5楼 发表于: 2017-10-10
回 hehui 的帖子
hehui:WebEngine要带一个巨大的库。。。。。 (2017-10-10 08:28) 

对于开发模式和应用场景来说多几十M并不算什么
博客地址: https://blog.csdn.net/zhengtianzuo06
Github: https://github.com/zhengtianzuo
个人产品: https://github.com/zhengtianzuo/Silk
产品网站: http://www.camelstudio.cn
离线big_mouse

只看该作者 6楼 发表于: 2020-04-22
快速回复
限100 字节
 
上一个 下一个