版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://www.cnblogs.com/lihuidashen/p/11588939.html 

 

 

https://mp.weixin.qq.com/s/gS9DYF18z966kp1m-QNnbA

 

软件架构

 

 

 

编译结果

 

 

 

现在开始讲一下源码

 

首先可以参考一下,会有一些收获的。

 

    看到上拉下拉出现的缓慢旋转的小圈圈了吗,其实使用的一个图片,不过看着还是有动态的效果,bingo.

 

 

Rectangle

    QML的Rectangle组件,顾名思义就是描绘一个矩形,一个可视化的对象。外加设置属性来达到我们想要的效果。常用的有矩形的颜色,边框颜色,圆角等设置。

  1. Rectangle {
  2. id: loadTip
  3. width: parent.width
  4. height: -root.contentY
  5. color: Qt.lighter("green")
  6. z: -2
  7. clip: true
  8. Text {
  9. anchors.top: loadImage.bottom
  10. anchors.horizontalCenter: parent.horizontalCenter
  11. text: qsTr("loading")
  12. font.pointSize: 10
  13. color: Qt.lighter("white")
  14. }
  15. Image {
  16. id: loadImage
  17. source: "qrc:/images/loading.ico"
  18. anchors.centerIn: parent
  19. }
  20. }

 

  1.  

ParallelAnimation

    组合动画有两种,这个只是其中一种而已,ParallelAnimation自己并不会产生动画,而是把其它的动画放进来。另外呢,在ParallelAnimation里面的动画也都是同时执行的。当然,别的方法也能实现,但是在大部分时候ParallelAnimation的方法是比其它方式更好的。

 

SequentialAnimation

    SequentialAnimation和ParallelAnimation这两个类型允许多个动画定义在一起。定义在SequentialAnimation中的动画,一个接一个运行。定义在ParallelAnimation在同一时间一起运行

 

PropertyAnimation

    PropertyAnimation提供了一种对属性值的更改进行动画处理的方法。它可以通过多种方式用于定义动画

 

RotationAnimation

    RotationAnimation是一种特殊的PropertyAnimation,它可以控制动画期间的旋转方向。默认情况下,它会沿数值变化的方向旋转。从0到240的旋转将顺时针旋转240度,而从240到0的旋转将逆时针旋转240度。可以设置direction属性以指定旋转发生的方向。

 

NumberAnimation

    NumberAnimation是一种特殊的PropertyAnimation,它定义在数值更改时要应用的动画。

 

  1. ParallelAnimation {
  2. id: dropDownAnimation
  3. NumberAnimation {
  4. target: root
  5. property: "contentY"
  6. to: -100;
  7. duration: 1
  8. }
  9. SequentialAnimation {
  10. RotationAnimation {
  11. target: loadImage
  12. from: 0
  13. to: 360
  14. duration: loadDuration
  15. }
  16. NumberAnimation {
  17. target: root
  18. property: "contentY"
  19. to: 0
  20. duration: 100
  21. }
  22. }
  23. onStopped: {root.load(); isDropDown = false; }
  24. }

 

 

对于上拉更新,下拉加载,删除一系列的动作,代码如下

  1. onIsPullOnChanged: {
  2. if(root.isPullOn)
  3. pullOnAnimation.restart();
  4. }
  1. onContentYChanged: {
  2. if( (root.height - Math.abs(contentY - contentHeight)) < 1.5
  3. && (root.height - Math.abs(contentY - contentHeight) ) > -1.5)
  4. root.bottomContentY = contentY;
  5. }
  1. onIsDropDownChanged: {
  2. if(isDropDown && !dropDownAnimation.running && (-contentY > 100.0))
  3. dropDownAnimation.restart();
  4. }
  1. onFlickingChanged: {
  2. if(!isDropDown && (-contentY > 100.0))
  3. isDropDown = true;
  4. if(!isPullOn && ((height - Math.abs(contentY - contentHeight)) > 65.0)) {
  5. isPullOn = true;
  6. }
  7. }

 

总结

    qt 真是个好东西,这个还有很多功能可以增加,比如置顶某人,编辑备注,设置为未读状态,这些都是很好的锻炼自己的例子,抛砖引玉一番。

 

 

 

 

推荐阅读

(点击标题可跳转阅读)

 

 

版权声明:本文为lihuidashen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/lihuidashen/p/11588939.html