当前位置:   article > 正文

Qt动画类实例一_qt 动画

qt 动画

C++ Qt是一个基于C++语言的跨平台应用程序开发框架,具有丰富的UI组件和API库。Qt包括了许多模块,如Qt Core、Qt GUI、Qt Network等,每个模块都提供了一系列的类和函数。Qt还提供了集成开发环境(IDE)Qt Creator,使得开发人员可以通过它来创建、编译、调试和部署Qt应用程序。  

学习Qt开发不知道做什么?我为大家整理的这些领域都涉及到Qt开发:嵌入式领域、桌面端开发、移动端、微控制器MCU、客户端(游戏、直播等等)、汽车领域行业、 消费类电子设备、医疗领域行业、工业自动化领域等等

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C++语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C++数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

代码之路

  1. #include "AnimationTest.h"
  2. #include <QLabel>
  3. #include <QPushButton>
  4. #include <QHBoxLayout>
  5. #include <QVBoxLayout>
  6. #include <QPainter>
  7. #include <QDebug>
  8. #define CORNER_WIDTH 20 // 拐角边框宽度;
  9. #define CORNER_HEIGHT 6 // 拐角边框高度;
  10. AnimationTest::AnimationTest(QWidget *parent)
  11. : QWidget(parent)
  12. {
  13. initTopWidget();
  14. this->setWindowIcon(QIcon(":/AnimationTest/Resources/icon.jpg"));
  15. this->setProperty("cornerOpacity", 0.0);
  16. this->setWindowFlags(Qt::FramelessWindowHint);
  17. this->setStyleSheet("QWidget{background:white;} \
  18. QPushButton{background:rgb(14, 150, 254);border:none;color:white;font-size:18px;font-weight:bold;}\
  19. QPushButton:hover{background:rgb(44, 137, 255);}\
  20. QPushButton:pressed{background:rgb(14, 135, 228);padding-top:3px;padding-left:3px;}\
  21. ");
  22. this->setFixedSize(QSize(370, 370));
  23. }
  24. // 初始化顶层Widget;
  25. void AnimationTest::initTopWidget()
  26. {
  27. m_backWidget = new QLabel(this);
  28. m_backWidget->setObjectName("BackWidget");
  29. m_backWidget->setFixedSize(QSize(350, 350));
  30. m_backWidget->setPixmap(QPixmap(":/AnimationTest/Resources/backImage.jpg").scaled(m_backWidget->width(), m_backWidget->height()));
  31. m_topWidget = new QWidget(m_backWidget);
  32. m_topWidget->setFixedSize(QSize(350, 350));
  33. m_topWidget->move(QPoint(-m_topWidget->width(), 0));
  34. m_moveAnimation = new QPropertyAnimation(m_topWidget, "pos");
  35. m_moveAnimation->setDuration(300);
  36. m_moveAnimation->setStartValue(QPoint(-m_topWidget->width(), 0));
  37. m_moveAnimation->setEndValue(QPoint(0, 0));
  38. m_opcityAnimation = new QPropertyAnimation(this, "cornerOpacity");
  39. m_opcityAnimation->setDuration(300);
  40. m_opcityAnimation->setStartValue(0);
  41. m_opcityAnimation->setEndValue(1.0);
  42. connect(m_opcityAnimation, SIGNAL(valueChanged(const QVariant&)), this, SLOT(update()));
  43. QLabel* topWidgetInfo = new QLabel;
  44. topWidgetInfo->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
  45. topWidgetInfo->setPixmap(QPixmap(":/AnimationTest/Resources/labelInfo.png"));
  46. QPushButton* pButtonPreview = new QPushButton(QStringLiteral("预览"));
  47. pButtonPreview->setFixedSize(QSize(100, 50));
  48. QPushButton* pButtonDownloadJPG = new QPushButton(QStringLiteral("下载JPG"));
  49. pButtonDownloadJPG->setFixedSize(QSize(100, 50));
  50. QPushButton* pButtonDownloadPNG = new QPushButton(QStringLiteral("下载PNG"));
  51. pButtonDownloadPNG->setFixedSize(QSize(100, 50));
  52. QHBoxLayout* hLayoutLabel = new QHBoxLayout;
  53. hLayoutLabel->addStretch();
  54. hLayoutLabel->addWidget(topWidgetInfo);
  55. hLayoutLabel->addStretch();
  56. hLayoutLabel->setMargin(0);
  57. QHBoxLayout* hLayoutButton = new QHBoxLayout;
  58. hLayoutButton->addStretch();
  59. hLayoutButton->addWidget(pButtonPreview);
  60. hLayoutButton->addWidget(pButtonDownloadJPG);
  61. hLayoutButton->addWidget(pButtonDownloadPNG);
  62. hLayoutButton->addStretch();
  63. hLayoutButton->setSpacing(6);
  64. hLayoutButton->setMargin(0);
  65. QVBoxLayout* vLayout = new QVBoxLayout(m_topWidget);
  66. vLayout->addLayout(hLayoutLabel);
  67. vLayout->addLayout(hLayoutButton);
  68. vLayout->setMargin(0);
  69. vLayout->setSpacing(0);
  70. QHBoxLayout* mainLayout = new QHBoxLayout(this);
  71. mainLayout->addWidget(m_backWidget);
  72. mainLayout->setMargin(10);
  73. }
  74. // 进入离开事件;
  75. // 主要进行动画的操作;
  76. void AnimationTest::leaveEvent(QEvent *event)
  77. {
  78. m_moveAnimation->setStartValue(QPoint(0, 0));
  79. m_moveAnimation->setEndValue(QPoint(m_topWidget->width(), 0));
  80. // 注掉以上两行代码使用下面代码则收缩往相反方向;
  81. // 使用以上两行代码则窗口收缩往相同方向;
  82. // m_moveAnimation->setDirection(QAbstractAnimation::Backward);
  83. m_moveAnimation->start();
  84. m_opcityAnimation->setDirection(QAbstractAnimation::Backward);
  85. m_opcityAnimation->start();
  86. }
  87. void AnimationTest::enterEvent(QEvent *event)
  88. {
  89. m_moveAnimation->setStartValue(QPoint(-m_topWidget->width(), 0));
  90. m_moveAnimation->setEndValue(QPoint(0, 0));
  91. // 注掉以上两行代码使用下面代码则收缩往相反方向;
  92. // 使用以上两行代码则窗口收缩往相同方向;
  93. // m_moveAnimation->setDirection(QAbstractAnimation::Forward);
  94. m_moveAnimation->start();
  95. m_opcityAnimation->setDirection(QAbstractAnimation::Forward);
  96. m_opcityAnimation->start();
  97. }
  98. // 绘制事件,主要绘制四角的边框;
  99. void AnimationTest::paintEvent(QPaintEvent *event)
  100. {
  101. Q_UNUSED(event);
  102. QPainter painter(this);
  103. // 左上角;
  104. drawCorner(&painter, QPoint(0, 0), 0);
  105. // 右上角;
  106. drawCorner(&painter, QPoint(this->width(), 0), 90);
  107. // 右下角;
  108. drawCorner(&painter, QPoint(this->width(), this->height()), 180);
  109. // 左下角;
  110. drawCorner(&painter, QPoint(0, this->height()), -90);
  111. }
  112. // 绘制单个角的边框;
  113. void AnimationTest::drawCorner(QPainter* painter, QPoint pos, int translateAngle)
  114. {
  115. painter->save();
  116. // 通过角度,位置转换进行绘制四个角的边框;
  117. int transparentValue = 255 * this->property("cornerOpacity").toFloat();
  118. QBrush rectBrush(QColor(30, 150, 230, transparentValue));
  119. painter->translate(pos);
  120. painter->rotate(translateAngle);
  121. painter->fillRect(QRect(0, 0, CORNER_WIDTH, CORNER_HEIGHT), rectBrush);
  122. painter->fillRect(QRect(0, 0 + CORNER_HEIGHT, CORNER_HEIGHT, CORNER_WIDTH - CORNER_HEIGHT), rectBrush);
  123. painter->restore();
  124. }

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C++语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C++数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制

Qt框架,GUI应用程序,跨平台开发,信号与槽机制,QML语言,模型视图编程,多线程编程,数据库编程,网络编程,XML解析,JSON解析,图形图像处理,用户界面设计,动画效果,OpenGL,WebKit,嵌入式开发,客户端/服务器应用程序.自定义控件QT6,C++语言基础,qt基础编程,qt软件开发,Qt架构设计,qt布局管理器,qt嵌入式开发,qt编程入门,qt数据库编程,qt跨平台框架,QT项目实战,Quick模块,OpenCV,Qt实战,OpenCV教程,QT界面开发,Qt框架,C++数据结构,Qt线程,桌面应用开发,qt桌面应用开发,Socket网络编程,qt开发工程师,qt开发,应用程序开发框架,图形视图框架,数据库编程,Qt开发编程,Qt开发控件,Qt开发工程师,QT开发必备技能栈,qt编码,qt网络编程,qt网络通信,Qt信号,Qt槽机制,qt字符串,qt数据类型,qt容器,qt客户端开发,qt软件工程师,qt页面绘制

本文福利,费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QT嵌入式开发,Quick模块等等)↓↓↓↓↓↓见下面↓↓文章底部点击费领取↓↓

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/喵喵爱编程/article/detail/843937
推荐阅读
相关标签
  

闽ICP备14008679号