#include "AnimationResizeWidget.h"
#include <QtCore/QEventLoop>
AnimationResizeWidget::AnimationResizeWidget(QWidget *parent) {
setAttribute(Qt::WA_StyledBackground);
m_pAnimation = new QPropertyAnimation(this);
m_pAnimation->setEasingCurve(QEasingCurve::Linear);
m_pAnimation->setTargetObject(this);
m_pAnimation->setPropertyName("animSize");
connect(m_pAnimation, &QPropertyAnimation::valueChanged, [this](){
emit animSizeChanged();
});
setDuration(200);
}
AnimationResizeWidget::~AnimationResizeWidget() {
delete m_pAnimation;
}
void AnimationResizeWidget::setDuration(int msecs) {
m_pAnimation->setDuration(msecs);
}
const int AnimationResizeWidget::duration() const {
return m_pAnimation->duration();
}
QSize AnimationResizeWidget::animSize() const {
return size();
}
void AnimationResizeWidget::setAnimSize(QSize size) {
setFixedSize(size);
}
void AnimationResizeWidget::setStartSize(const QSize &size) {
m_pAnimation->setStartValue(size);
}
QSize AnimationResizeWidget::startSize() const {
return m_pAnimation->startValue().toSize();
}
void AnimationResizeWidget::setEndSize(const QSize &size) {
m_pAnimation->setEndValue(size);
}
QSize AnimationResizeWidget::endSize() const {
return m_pAnimation->endValue().toSize();
}
void AnimationResizeWidget::run() {
if(m_pAnimation->startValue() == m_pAnimation->endValue())
return;
QEventLoop loop;
connect(m_pAnimation, &QAbstractAnimation::finished, [&](){
loop.quit();
});
emit animStarted();
m_pAnimation->start();
loop.exec();
m_pAnimation->disconnect(m_pAnimation, &QAbstractAnimation::finished, nullptr, nullptr);
emit animFinished();
}
Qt 实现窗口大小过渡动画demo


2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)

在本文中,我们将深入探讨如何使用Qt库来实现窗口大小的过渡动画效果。Qt是一个功能强大的C++图形用户界面工具包,广泛应用于桌面、移动和嵌入式平台。它提供了丰富的API,使得开发者能够轻松创建出具有动画效果的美观应用程序。 我们需要了解Qt中的QGraphicsView和QGraphicsScene组件,它们是实现窗口动画的基础。QGraphicsView是用来显示QGraphicsScene的视图,而QGraphicsScene则是一个二维图形场景,可以包含各种图形对象,如QGraphicsRectItem、QGraphicsPixmapItem等。 在实现窗口大小过渡动画时,我们通常会创建一个继承自QWidget的自定义窗口类,然后在这个类中添加动画效果。以下是一些关键步骤: 1. **创建自定义窗口类**:创建一个新类,继承自QWidget,并在构造函数中初始化窗口的基本属性,如初始大小、位置等。 ```cpp class MyAnimatedWindow : public QWidget { Q_OBJECT public: MyAnimatedWindow(QWidget *parent = nullptr); ~MyAnimatedWindow(); private slots: void startAnimation(); private: // 其他成员变量和方法 }; ``` 2. **添加动画效果**:Qt的QPropertyAnimation类可以用于动画化窗口的大小。需要声明窗口大小相关的Q_PROPERTY,然后在startAnimation()槽函数中创建并启动动画。 ```cpp Q_PROPERTY(QSize size READ size WRITE setSize NOTIFY sizeChanged) // 在构造函数中 QSize initialSize = ...; // 设置初始大小 setFixedSize(initialSize); // 添加动画 QPropertyAnimation *animation = new QPropertyAnimation(this, "size"); animation->setStartValue(initialSize); animation->setEndValue(newSize); // 新的目标大小 animation->setDuration(500); // 动画持续时间(毫秒) animation->start(); ``` 3. **信号与槽**:当窗口大小改变时,可能需要更新其他相关部件,这时可以使用信号和槽机制。在上述示例中,声明了`sizeChanged`信号,并在`setFixedSize`或`setSize`方法中触发该信号。 4. **平滑过渡**:为了使动画更平滑,可以设置动画的EasingCurve类型,例如QEasingCurve::InOutQuad可以提供平滑的开始和结束效果。 ```cpp animation->setEasingCurve(QEasingCurve::InOutQuad); ``` 5. **事件处理**:在某些情况下,可能需要在动画过程中响应用户输入或系统事件。为此,可以覆盖QWidget的`event`方法,检查并处理特定的事件。 6. **测试与调试**:创建一个简单的主程序,实例化自定义窗口类,并显示出来。运行程序,点击按钮或其他触发器来调用`startAnimation`,观察窗口大小的过渡动画效果。 ```cpp int main(int argc, char *argv[]) { QApplication app(argc, argv); MyAnimatedWindow window; window.show(); return app.exec(); } ``` 以上就是使用Qt实现窗口大小过渡动画的基本流程。通过Qt的QPropertyAnimation类,你可以轻松地创建出各种复杂的动画效果,提升用户体验。在实际开发中,还可以根据需求调整动画参数,如速度、曲线类型等,以达到理想的效果。




























- 1

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整
- zzkq11222332022-11-09资源内容详实,描述详尽,解决了我的问题,受益匪浅,学到了。
- SQMcf2024-05-04资源内容总结的很到位,内容详实,很受用,学到了~
- Li-yaosong2022-09-02非常有用的资源,可以直接使用,对我很有用,果断支持!
- q11608112242024-10-01资源是宝藏资源,实用也是真的实用,感谢大佬分享~
- 嵌入式_Do_it2024-05-07资源和描述一致,质量不错,解决了我的问题,感谢资源主。

- 粉丝: 1886
- 资源: 18





我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源


