QTextEdit中插入Gif动画并显示

来源:互联网 发布:驱蚊子软件 编辑:程序博客网 时间:2024/06/07 05:38

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