qt 实现一个好看的等待动画,不用qmovie. 用动画类和状态机
时间: 2024-02-05 10:12:49 浏览: 40
好的,以下是一个使用 Qt 动画类和状态机实现的等待动画示例:
首先,创建一个新的 Qt Widgets 应用程序项目,然后在主窗口的 UI 界面中添加一个 QLabel 控件,用于显示等待动画。
在头文件中,包含如下的 Qt 类:
```cpp
#include <QWidget>
#include <QStateMachine>
#include <QState>
#include <QPropertyAnimation>
```
接着,在主窗口的构造函数中初始化状态机和动画,并将它们连接起来。示例代码如下:
```cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 初始化状态机
QStateMachine *stateMachine = new QStateMachine(this);
// 创建两个状态
QState *state1 = new QState();
QState *state2 = new QState();
// 添加状态到状态机
stateMachine->addState(state1);
stateMachine->addState(state2);
// 设置初始状态
stateMachine->setInitialState(state1);
// 创建动画对象
QPropertyAnimation *animation = new QPropertyAnimation(ui->label, "text");
animation->setDuration(2000); // 动画持续时间 2 秒钟
animation->setStartValue("");
animation->setEndValue("Loading...");
// 将动画对象添加到状态机的状态转换中
state1->addTransition(ui->startButton, &QPushButton::clicked, state2);
state2->addTransition(ui->stopButton, &QPushButton::clicked, state1);
state1->addAnimation(animation);
state2->addAnimation(animation);
// 启动状态机
stateMachine->start();
}
```
在上面的代码中,我们创建了一个 QStateMachine 类型的状态机对象,并创建了两个状态 state1 和 state2。我们将 QLabel 控件的文本属性与 QPropertyAnimation 类型的动画对象的属性 text 相关联,并设置了动画的持续时间为 2 秒钟。然后,我们将动画对象添加到状态机的状态转换中,并启动状态机。
最后,在主窗口的析构函数中,删除状态机和动画对象,示例代码如下:
```cpp
MainWindow::~MainWindow()
{
delete ui;
delete stateMachine;
delete animation;
}
```
运行程序,点击 Start 按钮,即可看到等待动画效果。点击 Stop 按钮,动画会停止。