很多窗口会在背景展示一些动态的信息,此时用gif是比较合适的,Qt窗口使用gif作用背景步骤如下:
定义一个movie对象
QScopedPointer<QMovie> movie_;
设置movie
movie_.reset(new QMovie(path)); connect(movie_.get(), &QMovie::frameChanged, this, &FramelessWidget::onPaintNewFrame); movie_->start(); // update会进行重绘 void FramelessWidget::onPaintNewFrame(int frameNumber) { update(); }
实现paintEvent 要想将图片绘制到背景上需要实现paintEvent接口
if (movie_) { QPixmap pixmap = movie_->currentPixmap(); if (!pixmap.isNull()) { pixmap_ = pixmap; } } if (!pixmap_.isNull()) { QPainter painter(this); painter.drawPixmap(0, 0, pixmap_.scaled(this->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); // 绘制不规则背景 }
这样就让背景动起来了,不过如果想实现一些动画效果还是有些不足。