一、效果展示

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

二、源码分析

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

2、时钟项

 Item {
id : clock
width: {
if (ListView.view && ListView.view.width >= )
return ListView.view.width / Math.floor(ListView.view.width / 200.0);
else
return ;
} height: {
if (ListView.view && ListView.view.height >= )
return ListView.view.height;
else
return ;
} property alias city: cityLabel.text//属性别名,方便在外部使用
property int hours//自定义属性
property int minutes
property int seconds
property real shift
property bool night: false//是否是晚上 来决定是否显示黑色实心圈
property bool internationalTime: true //Unset for local time //js函数
function timeChanged() {
var date = new Date;
hours = internationalTime ? date.getUTCHours() + Math.floor(clock.shift) : date.getHours()
night = ( hours < || hours > )
minutes = internationalTime ? date.getUTCMinutes() + ((clock.shift % ) * ) : date.getMinutes()
seconds = date.getUTCSeconds();
} Timer {
interval: ; running: true; repeat: true;//一个每隔100ms重复执行的定时器,默认启动
onTriggered: clock.timeChanged()//定时器槽函数
} Item {
anchors.centerIn: parent
width: ; height: Image { id: background; source: "clock.png"; visible: clock.night == false }//最外层白色圈
Image { source: "clock-night.png"; visible: clock.night == true }//黑色实心圈,带有白色实心圆球的刻度点 //时针
Image {
x: 92.5; y:
source: "hour.png"
transform: Rotation {
id: hourRotation
origin.x: 7.5; origin.y: ;
angle: (clock.hours * ) + (clock.minutes * 0.5)
Behavior on angle {
SpringAnimation { spring: ; damping: 0.2; modulus: }
}
}
} //分针
Image {
x: 93.5; y:
source: "minute.png"
transform: Rotation {
id: minuteRotation
origin.x: 6.5; origin.y: ;
angle: clock.minutes *
Behavior on angle {
SpringAnimation { spring: ; damping: 0.2; modulus: }
}
}
} //秒针
Image {
x: 97.5; y:
source: "second.png"
transform: Rotation {
id: secondRotation
origin.x: 2.5; origin.y: ;
angle: clock.seconds *
Behavior on angle {
SpringAnimation { spring: ; damping: 0.2; modulus: }
}
}
}
//中心白色圆圈
Image {
anchors.centerIn: background; source: "center.png"
} Text {
id: cityLabel//该属性已经被导出,在clocks.qml文件中指定该属性值
y: ; anchors.horizontalCenter: parent.horizontalCenter
color: "white"
font.family: "Helvetica"
font.bold: true; font.pixelSize:
style: Text.Raised; styleColor: "black"
}
}
}

3、时钟列表

 import "content" as Content  //导入目录  该目录底下的所有qml自定义控件均可以直接使用

 Rectangle {
id: root
width: ; height:
color: "#646464" ListView {//列表视图
id: clockview//唯一id
anchors.fill: parent//填充整个父窗口
orientation: ListView.Horizontal//列表朝向为水平方向
cacheBuffer: //左右2000个像素以内的委托项都不会被析构
snapMode: ListView.SnapOneItem//拖拽模式
highlightRangeMode: ListView.ApplyRange//高亮模式,高亮尽可能在可是区间内 delegate: Content.Clock { city: cityName; shift: timeShift }//设置Clock控件的导出属性值
model: ListModel {//静态model
ListElement { cityName: "New York"; timeShift: - }
ListElement { cityName: "London"; timeShift: }
ListElement { cityName: "Oslo"; timeShift: }
ListElement { cityName: "Mumbai"; timeShift: 5.5 }
ListElement { cityName: "Tokyo"; timeShift: }
ListElement { cityName: "Brisbane"; timeShift: }
ListElement { cityName: "Los Angeles"; timeShift: - }
}
}
//左下角上一个箭头
Image {
anchors.left: parent.left
anchors.bottom: parent.bottom
anchors.margins:
source: "content/arrow.png"
rotation: -
opacity: clockview.atXBeginning ? : 0.5//当视图滚动到第一个时透明度为0(使用行为动画)
Behavior on opacity { NumberAnimation { duration: } }//在透明度属性上添加动画(数字动画)
}
//右下角下一个箭头
Image {
anchors.right: parent.right
anchors.bottom: parent.bottom
anchors.margins:
source: "content/arrow.png"
rotation:
opacity: clockview.atXEnd ? : 0.5
Behavior on opacity { NumberAnimation { duration: } }
}
}

qml demo分析(clocks-时钟)的更多相关文章

  1. qml demo分析(threadedanimation-线程动画)

    一.效果预览 使用过qml的同学都知道,使用qml做动画效果是非常简单的,再也不需要像QWidget那样,自己模拟一个动画,费时又费力,往往还达不到效果.今天我们就来分析下qml的两种动画实现方式,如 ...

  2. qml demo分析(maskedmousearea-异形窗口)

    一.效果展示 如本文的标题所示,这篇文章分析的demo是一个异形窗口,主要展示鼠标在和异形区域交互的使用,效果如图1所示,当鼠标移动到白云或者月亮上时,相应的物体会高亮,当鼠标按下时,物体会有一个放大 ...

  3. qml demo分析(maroon-小游戏)

    1.效果展示 这篇文章我还是分析一个qt源码中的qml程序,程序运行效果如下图所示. 图1  游戏开始 图2  游戏中 2.源码分析 这个游戏的源码文件比较多,为了能更清楚的了解整个代码,我先整体分析 ...

  4. qml demo分析(abstractitemmodel-数据分离)

    一.概述 qt5之后qml也可以被用于桌面程序开发,今天我就拿出qt demo中的一个qml示例程序进行分析.这个demo主要是展示了qml数据和展示分离的使用方式,qml只专注于快速高效的绘制界面, ...

  5. qml demo分析(externaldraganddrop-拖拽)

    一.效果展示 客户端程序拖拽是一个很常见的需求,对于QWidget程序来说,需要重写如图1这么几个方法,通过重写这几个方法的逻辑,我们就可以控制鼠标拖拽的逻辑,糟糕的是QDrag执行exec后是一个阻 ...

  6. qml demo分析(threading-线程任务)

    一.关键类说明 qml内置了WorkerScript组件,该组件有一个source属性,可以加载js文件,含有一个名为message的信号,意味着他有一个默认的onMessage槽函数,除此之外他还有 ...

  7. qml demo分析(text-字体展示)

    上一篇文章分析了一个小游戏,使用qml编写界面+js进行复杂逻辑控制,算是一个比较完整的qml示例代码了,今天就不那么继续变态啦,来看一个简单的字体示例程序吧,该示例代码比较简单,主要是展示了几个简单 ...

  8. qml demo分析(samegame-拼图游戏)

    一.效果展示 相信大家都玩儿过连连看游戏,而且此款游戏也是闲时一款打发时间的趣事,那么接下来我将分析一款类似的游戏,完全使用qml编写界面,复杂逻辑使用js完成.由于此游戏包含4种游戏模式,因此本篇文 ...

  9. qml demo分析(rssnews-常见新闻布局)

    一.效果展示 今儿来分析一篇常见的ui布局,完全使用qml编写,ui交互效果友好,如图1所示,是一个常见的客户端新闻展示效果,左侧是一个列表,右侧是新闻详情. 图1 新闻效果图 二.源码分析 首先先来 ...

随机推荐

  1. selenium测试(Java)-- 显式等待(九)

    转自:https://www.cnblogs.com/moonpool/p/5668571.html 显式等待可以使用selenium预置的判断方法,也可以使用自定义的方法. package com. ...

  2. java函数式编程之Consumer

    参考https://blog.csdn.net/z345434645/article/details/53794724 https://blog.csdn.net/chuji2012/article/ ...

  3. 【codeforces 718 C&D】C. Sasha and Array&D. Andrew and Chemistry

    C. Sasha and Array 题目大意&题目链接: http://codeforces.com/problemset/problem/718/C 长度为n的正整数数列,有m次操作,$o ...

  4. bzoj4044 [Cerc2014] Virus synthesis

    回文自动机上dp f[x]表示形成x代表的回文串所需的最小步数, 若len[x]为奇数,f[x]=len[x],因为即使有更优的,也是直接添加,没有复制操作,那样就不用从x转移了. 若len[x]为偶 ...

  5. bzoj3289 Mato的文件管理 莫队+树状数组

    求逆序对个数,莫队套树状数组 #include<cstdio> #include<iostream> #include<cstring> #include<c ...

  6. BZOJ_3398_[Usaco2009 Feb]Bullcow 牡牛和牝牛_组合数学

    BZOJ_3398_[Usaco2009 Feb]Bullcow 牡牛和牝牛_组合数学 Description     约翰要带N(1≤N≤100000)只牛去参加集会里的展示活动,这些牛可以是牡牛, ...

  7. myeclipse maven tomcat插件 创建web工程

    自从有了云笔记,很久不写博客了.今天写了使用Freemarker静态化JSP页面,索性就发出来.初学,勿喷. 这篇文字以前放在云笔记里,当然里面有很多借鉴网络上的东西,而自己也使用Maven很久了,索 ...

  8. python3环境搭建(uWSGI+django+nginx+python+MySQL)

    1.系统环境,必要知识 #cat /etc/redhat-release CentOS Linux release (Core) #uname -r -.el7.x86_64 暂时关闭防护墙,关闭se ...

  9. Python练习:哥德巴赫猜想

    哥德巴赫猜想 哥德巴赫 1742 年给欧拉的信中哥德巴赫提出了以下猜想:任一大于 2 的偶数都可写成两个质数之和.但是哥德巴赫自己无法证明它,于是就写信请教赫赫有名的大数学家欧拉帮忙证明,但是一直到死 ...

  10. 有趣的8个IT冷知识

    阅读本文大概需要 2.8 分钟. 想要成为一名成功的程序员,我们除了了解不同编程语言的设计思路,也应当了解编程的发展历史,从而判断未来的编程技术将走向何方.接下就为大家普及下计算机发展历程中的8个冷门 ...