Skip to main content

Command Palette

Search for a command to run...

QTextEdit动态显示gif动画

Published
•1 min read•View as Markdown

原理:使用QMovie播放gif并更新当前帧到QTextEdit中Document的Resource。
相关信号:QMovie::frameChanged(int frameNo)
实例代码: 初始化QMovie对象:

QMovie*movie=newQMovie(this);
movie->setFileName(img_path);
movie->setCacheMode(QMovie::CacheNone);
connect(movie,SIGNAL(frameChanged(int)),this,SLOT(frameChanged(int)));
movie->start();

槽函数:

voidMyObject::frameChanged(intframeNumber)
if(frameNumber==-1)
return;

QMovie*movie=(QMovie*)this->sender();
QStringname=movie->fileName().toUtf8().toBase64();
ui->view->document()->addResource(QTextDocument::ImageResource,
name,
QVariant(movie->currentPixmap()));
ui->view->setLineWrapColumnOrWidth(ui->view->lineWrapColumnOrWidth());

关键点:

QMovie对象在播放gif动画时发送frameChanged信号至槽,此处使用QOjbect::sender()方法来得到具体的对象指针,然后调用document的addResource方法更新当前的帧到其图像资源,最后调用setLineWrapColumnOrWidth来刷新显示。这样就实现了gif图片的不断刷新。

More from this blog

解决QWidget用winId获取HWND而导致Qt程序无事件消息的问题

问题原因: 当对一个QWidget调用winId时,默认情况下,Qt会对该窗口进行Native化,从而导致如鼠标等事件被其它原生窗口接管,表现出来的现像就是窗口不响应任何事件 解决思路: 防止Qt窗口Native化 解决办法: 第一步,在创建QApplication对象之前设置: QApplication::setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); //注意:Qt::AA_NativeWindows受环境变量 QT_USE_NATI...

Jul 7, 20251 min read
雷

雷的部落格威力缩小版

30 posts

雷的部落格威力缩小版