实现方法大致为3种:
是利用QPainter类来绘制自定义的加载中动画控件。QPainter类可以在QWidget或者其他绘图设备上进行低级别的绘图操作,比如画线、画圆、画文字等。
你需要先创建一个自定义的QWidget子类,并重写其paintEvent()方法,在里面使用QPainter对象来绘制你想要的动画效果,然后使用QTimer对象来定时更新界面,实现动画的播放。
示例代码
#include <QWidget>
#include <QPainter>
#include <QTimer>
class LoadingWidget : public QWidget
{
Q_OBJECT
public:
LoadingWidget(QWidget *parent = nullptr) : QWidget(parent)
{
// 设置窗口大小和背景颜色
setFixedSize(200, 200);
setStyleSheet("background-color: white;");
// 创建一个定时器,每隔50毫秒触发一次timeout()信号
QTimer *timer = new QTimer(this);
timer->setInterval(50);
// 连接timeout()信号和update()槽函数,用于更新界面
connect(timer, &QTimer::timeout, this, QOverload<>::of(&QWidget::update));
// 启动定时器
timer->start();
}
protected:
void paintEvent(QPaintEvent *event) override
{
// 创建一个QPainter对象,指定当前窗口为绘图设备
QPainter painter(this);
// 设置画笔颜色和宽度
painter.setPen(QPen(Qt::blue, 10));
// 获取当前窗口的宽度和高度
int width = this->width();
int height = this->height();
// 计算圆心坐标和半径
int centerX = width / 2;
int centerY = height / 2;
int radius = qMin(width, height) / 4;
// 根据当前时间计算旋转角度(每秒旋转360度)
QTime time = QTime::currentTime();
int angle = time.msecsSinceStartOfDay() % 1000 * 360 / 1000;
// 将坐标系原点移动到圆心,并旋转相应角度
painter.translate(centerX, centerY);
painter.rotate(angle);
// 绘制一个圆弧,起始角度为0度,跨越角度为270度(顺时针方向)
painter.drawArc(-radius, -radius, radius * 2, radius * 2, 0 * 16, -270 * 16);
}
};
第二种方法是利用QML语言来显示GIF动画。QML是一种声明式的语言,用于创建动态的用户界面。在QML中,有一个专门的控件显示GIF,即AnimatedImage。
你只需要在QML文件中添加一个AnimatedImage元素,并指定其source属性为GIF文件的路径,就可以显示GIF动画了。
import QtQuick 2.0
Rectangle {
width: 360
height: 360
AnimatedImage {
id: gif
source: "qrc:/shapes.gif" // GIF文件的路径
anchors.centerIn: parent
}
}
第三种方法是利用QMovie类来加载GIF图片。QMovie类可以显示没有声音的简单动画,主要支持GIF和MNG格式的文件。
你需要先创建一个QMovie对象,并为其指定要播放的动画文件,然后将QMovie对象与一个QLabel或者一个QGraphicsMovieItem关联起来,最后调用start()方法开始播放动画
示例代码如下:
#include <QApplication>
#include <QLabel>
#include <QMovie>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
// 创建一个QMovie对象,指定要播放的GIF文件
QMovie *movie = new QMovie("loading.gif");
// 创建一个QLabel对象,设置其大小和位置
QLabel *label = new QLabel();
label->setGeometry(100, 100, 200, 200);
// 将QMovie对象与QLabel对象关联起来
label->setMovie(movie);
// 开始播放动画
movie->start();
// 显示QLabel对象
label->show();
return app.exec();
}
网站声明:如果转载,请联系本站管理员。否则一切后果自行承担。
添加我为好友,拉您入交流群!
请使用微信扫一扫!