QTextEdit中插入Gif动画并显示

论坛 期权论坛 脚本     
匿名网站用户   2020-12-20 01:10   20   0

早期我设计的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



分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP