zoukankan      html  css  js  c++  java
  • qml demo分析(clocks-时钟)

    一、效果展示

      效果如图1所示,时钟列表支持鼠标左右拖动,带有黑色背景的是晚上时钟,无黑色背景的是白天时钟

    二、源码分析

    1、main.cpp文件中只包含了一个宏,该宏的具体解释请看qml 示例中的关键宏文章

    2、时钟项

      1 Item {
      2     id : clock
      3      {
      4         if (ListView.view && ListView.view.width >= 200)
      5             return ListView.view.width / Math.floor(ListView.view.width / 200.0);
      6         else
      7             return 200;
      8     }
      9 
     10     height: {
     11         if (ListView.view && ListView.view.height >= 240)
     12             return ListView.view.height;
     13         else
     14             return 240;
     15     }
     16 
     17     property alias city: cityLabel.text//属性别名,方便在外部使用
     18     property int hours//自定义属性
     19     property int minutes
     20     property int seconds
     21     property real shift
     22     property bool night: false//是否是晚上  来决定是否显示黑色实心圈
     23     property bool internationalTime: true //Unset for local time
     24 
     25     //js函数
     26     function timeChanged() {
     27         var date = new Date;
     28         hours = internationalTime ? date.getUTCHours() + Math.floor(clock.shift) : date.getHours()
     29         night = ( hours < 7 || hours > 19 )
     30         minutes = internationalTime ? date.getUTCMinutes() + ((clock.shift % 1) * 60) : date.getMinutes()
     31         seconds = date.getUTCSeconds();
     32     }
     33 
     34     Timer {
     35         interval: 100; running: true; repeat: true;//一个每隔100ms重复执行的定时器,默认启动
     36         onTriggered: clock.timeChanged()//定时器槽函数
     37     }
     38 
     39     Item {
     40         anchors.centerIn: parent
     41          200; height: 240
     42         
     43         Image { id: background; source: "clock.png"; visible: clock.night == false }//最外层白色圈
     44         Image { source: "clock-night.png"; visible: clock.night == true }//黑色实心圈,带有白色实心圆球的刻度点   
     45 
     46         //时针
     47         Image {
     48             x: 92.5; y: 27
     49             source: "hour.png"
     50             transform: Rotation {
     51                 id: hourRotation
     52                 origin.x: 7.5; origin.y: 73;
     53                 angle: (clock.hours * 30) + (clock.minutes * 0.5)
     54                 Behavior on angle {
     55                     SpringAnimation { spring: 2; damping: 0.2; modulus: 360 }
     56                 }
     57             }
     58         }
     59 
     60         //分针
     61         Image {
     62             x: 93.5; y: 17
     63             source: "minute.png"
     64             transform: Rotation {
     65                 id: minuteRotation
     66                 origin.x: 6.5; origin.y: 83;
     67                 angle: clock.minutes * 6
     68                 Behavior on angle {
     69                     SpringAnimation { spring: 2; damping: 0.2; modulus: 360 }
     70                 }
     71             }
     72         }
     73 
     74         //秒针
     75         Image {
     76             x: 97.5; y: 20
     77             source: "second.png"
     78             transform: Rotation {
     79                 id: secondRotation
     80                 origin.x: 2.5; origin.y: 80;
     81                 angle: clock.seconds * 6
     82                 Behavior on angle {
     83                     SpringAnimation { spring: 2; damping: 0.2; modulus: 360 }
     84                 }
     85             }
     86         }
     87         //中心白色圆圈
     88         Image {
     89             anchors.centerIn: background; source: "center.png"
     90         }
     91 
     92         Text {
     93             id: cityLabel//该属性已经被导出,在clocks.qml文件中指定该属性值
     94             y: 210; anchors.horizontalCenter: parent.horizontalCenter
     95             color: "white"
     96             font.family: "Helvetica"
     97             font.bold: true; font.pixelSize: 16
     98             style: Text.Raised; styleColor: "black"
     99         }
    100     }
    101 }

    3、时钟列表

     1 import "content" as Content  //导入目录  该目录底下的所有qml自定义控件均可以直接使用
     2 
     3 Rectangle {
     4     id: root
     5      640; height: 320
     6     color: "#646464"
     7 
     8     ListView {//列表视图
     9         id: clockview//唯一id
    10         anchors.fill: parent//填充整个父窗口
    11         orientation: ListView.Horizontal//列表朝向为水平方向
    12         cacheBuffer: 2000//左右2000个像素以内的委托项都不会被析构
    13         snapMode: ListView.SnapOneItem//拖拽模式
    14         highlightRangeMode: ListView.ApplyRange//高亮模式,高亮尽可能在可是区间内
    15 
    16         delegate: Content.Clock { city: cityName; shift: timeShift }//设置Clock控件的导出属性值
    17         model: ListModel {//静态model
    18             ListElement { cityName: "New York"; timeShift: -4 }
    19             ListElement { cityName: "London"; timeShift: 0 }
    20             ListElement { cityName: "Oslo"; timeShift: 1 }
    21             ListElement { cityName: "Mumbai"; timeShift: 5.5 }
    22             ListElement { cityName: "Tokyo"; timeShift: 9 }
    23             ListElement { cityName: "Brisbane"; timeShift: 10 }
    24             ListElement { cityName: "Los Angeles"; timeShift: -8 }
    25         }
    26     }
    27     //左下角上一个箭头
    28     Image {
    29         anchors.left: parent.left
    30         anchors.bottom: parent.bottom
    31         anchors.margins: 10
    32         source: "content/arrow.png"
    33         rotation: -90
    34         opacity: clockview.atXBeginning ? 0 : 0.5//当视图滚动到第一个时透明度为0(使用行为动画)
    35         Behavior on opacity { NumberAnimation { duration: 500 } }//在透明度属性上添加动画(数字动画)
    36     }
    37     //右下角下一个箭头
    38     Image {
    39         anchors.right: parent.right
    40         anchors.bottom: parent.bottom
    41         anchors.margins: 10
    42         source: "content/arrow.png"
    43         rotation: 90
    44         opacity: clockview.atXEnd ? 0 : 0.5
    45         Behavior on opacity { NumberAnimation { duration: 500 } }
    46     }
    47 }
  • 相关阅读:
    ValueError:Expected more than 1 value per channel when training, got input size torch.Size([1, 512, 1, 1])
    指定GPU运行
    ModuleNotFoundError: No module named 'past'
    ImportError: libSM.so.6: cannot open shared object file: No such file or dir
    ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
    zsh: command not found: conda
    TypeError: Class advice impossible in Python3. Use the @implementer class decorator instead.
    数据结构(八)图
    数据结构(二)线性表
    数据结构(七)数与二叉树
  • 原文地址:https://www.cnblogs.com/swarmbees/p/6344837.html
Copyright © 2011-2022 走看看