Qt+QWidget实现简约美观的加载动画
短信预约 C/C++-IT技能 免费直播动态提醒
这篇文章将为大家详细讲解有关Qt+QWidget实现简约美观的加载动画,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
Qt+QWidget实现简约美观的加载动画
1. 创建一个QWidget小部件
首先,创建一个QWidget小部件作为动画的容器:
QWidget *widget = new QWidget;
widget->setFixedSize(200, 200);
2. 定义动画曲线
为动画创建一条自定义曲线,控制小部件的移动和形状变化:
QGraphicsItemAnimation *animation = new QGraphicsItemAnimation;
animation->setTimeLine(new QTimeLine(1000));
3. 设置小部件的属性
为小部件设置动画属性,包括位置、大小和形状:
animation->setPosAt(0, QPointF(100, 100));
animation->setPosAt(0.5, QPointF(100, 200));
animation->setPosAt(1, QPointF(200, 200));
animation->setRectAt(0, QRectF(100, 100, 50, 50));
animation->setRectAt(0.5, QRectF(100, 200, 50, 50));
animation->setRectAt(1, QRectF(200, 200, 50, 50));
4. 启动动画
启动动画时间线以开始动画:
animation->timeLine()->start();
5. 添加小部件到布局
将小部件添加到布局中以显示动画:
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(widget);
setLayout(layout);
6. 自适应缩放
为了使动画在不同分辨率的屏幕上自适应缩放,可以监听窗口大小的变化并相应调整小部件的大小:
connect(this, &QMainWindow::sizeChanged, [this](const QSize &size) {
widget->setFixedSize(size.width() / 2, size.height() / 2);
});
7. 动画细节
- 时间线持续时间:1000毫秒
- 动画曲线:自定义曲线,从中心移动到右上角并改变大小
- 小部件形状:矩形,在动画过程中改变大小和位置
8. 优化动画性能
为了优化动画性能,可以使用以下技术:
- 禁用小部件的更新,直到动画完成
- 使用QGraphicsItemAnimation代替QWidget动画
- 使用硬件加速(如果可用)
9. 扩展和自定义
该动画可以根据需要进行扩展和自定义:
- 添加更多动画曲线以创建不同的效果
- 更改动画时间线持续时间
- 修改小部件的形状和大小
示例代码
完整的示例代码如下:
#include <QApplication>
#include <QGraphicsItemAnimation>
#include <QMainWindow>
#include <QTimeLine>
#include <QVBoxLayout>
#include <QWidget>
class LoadingAnimation : public QMainWindow {
public:
LoadingAnimation() {
QWidget *widget = new QWidget;
widget->setFixedSize(200, 200);
QGraphicsItemAnimation *animation = new QGraphicsItemAnimation;
animation->setTimeLine(new QTimeLine(1000));
animation->setPosAt(0, QPointF(100, 100));
animation->setPosAt(0.5, QPointF(100, 200));
animation->setPosAt(1, QPointF(200, 200));
animation->setRectAt(0, QRectF(100, 100, 50, 50));
animation->setRectAt(0.5, QRectF(100, 200, 50, 50));
animation->setRectAt(1, QRectF(200, 200, 50, 50));
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(widget);
setLayout(layout);
connect(this, &QMainWindow::sizeChanged, [this](const QSize &size) {
widget->setFixedSize(size.width() / 2, size.height() / 2);
});
animation->timeLine()->start();
}
};
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
LoadingAnimation animation;
animation.show();
return app.exec();
}
以上就是Qt+QWidget实现简约美观的加载动画的详细内容,更多请关注编程学习网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341