QML 使用PathView制作日期选择
先看效果
可以实现切换月份时日期天数增加减少,润年时2月份设置29天,源码很简单
///准备部分
ListModel{
id: listmodel_year
ListElement{yname:"2019"} ListElement{yname:"2020"} ListElement{yname:"2021"}
}
Component{
id: com_delegate_year
Column{
id: wrapper_year
Text {
id: nameText
text: yname
color: wrapper_year.PathView.isCurrentItem ? "#14c0f5" : "#dcdcdc"
}
}
}
ListModel{
id:listmodel_start_month
ListElement{startmname:"01"} ListElement{startmname:"02"} ListElement{startmname:"03"} ListElement{startmname:"04"} ListElement{startmname:"05"}
ListElement{startmname:"06"} ListElement{startmname:"07"} ListElement{startmname:"08"} ListElement{startmname:"09"} ListElement{startmname:"10"}
ListElement{startmname:"11"} ListElement{startmname:"12"}
}
Component{
id: com_delegate_start_month
Column{
id: wrapper_start_month
Text {
id: txt_home_date_start_month
text: startmname
color: wrapper_start_month.PathView.isCurrentItem ? "#14c0f5" : "#dcdcdc"
}
}
}
ListModel{
id:listmodel_stop_month
ListElement{stopmname:"01"} ListElement{stopmname:"02"} ListElement{stopmname:"03"} ListElement{stopmname:"04"} ListElement{stopmname:"05"}
ListElement{stopmname:"06"} ListElement{stopmname:"07"} ListElement{stopmname:"08"} ListElement{stopmname:"09"} ListElement{stopmname:"10"}
ListElement{stopmname:"11"} ListElement{stopmname:"12"}
}
Component{
id: com_delegate_stop_month
Column{
id: wrapper_stop_month
Text {
id: txt_home_date_stop_month
text: stopmname
color: wrapper_stop_month.PathView.isCurrentItem ? "#14c0f5" : "#dcdcdc"
}
}
}
ListModel{
id: listmodel_start_day
ListElement{startdname:"01"} ListElement{startdname:"02"} ListElement{startdname:"03"} ListElement{startdname:"04"} ListElement{startdname:"05"}
ListElement{startdname:"06"} ListElement{startdname:"07"} ListElement{startdname:"08"} ListElement{startdname:"09"} ListElement{startdname:"10"}
ListElement{startdname:"11"} ListElement{startdname:"12"} ListElement{startdname:"13"} ListElement{startdname:"14"} ListElement{startdname:"15"}
ListElement{startdname:"16"} ListElement{startdname:"17"} ListElement{startdname:"18"} ListElement{startdname:"19"} ListElement{startdname:"20"}
ListElement{startdname:"21"} ListElement{startdname:"22"} ListElement{startdname:"23"} ListElement{startdname:"23"} ListElement{startdname:"25"}
ListElement{startdname:"26"} ListElement{startdname:"27"} ListElement{startdname:"28"} ListElement{startdname:"29"} ListElement{startdname:"30"}
ListElement{startdname:"31"}
}
Component{
id: com_delegate_start_day
Column{
id: wrapper_start_day
Text {
id: txt_home_date_start_day
text: startdname
color: wrapper_start_day.PathView.isCurrentItem ? "#14c0f5" : "#dcdcdc"
}
}
}
///显示部分
Rectangle{//起
id: rec_home_date_start
width: btn_home_premonth.width / 2
height: width * 5/2 - 3
anchors.top: parent.top
anchors.topMargin: 3
anchors.left: parent.left
anchors.leftMargin: 3
Image {
source: "images/label1_2.png"
anchors.fill: parent
}
Text {
text: qsTr("起")
anchors.centerIn: parent
}
}
Rectangle{//起始年
id:rec_home_date_start_year
width: btn_home_premonth.width
height: width / 2
anchors.left: rec_home_date_start.right
anchors.leftMargin: 3
y:(rec_home_date_start.height - height) / 2 + 5
Image {
source: "images/calendar.png"
anchors.fill: parent
}
PathView{
id: pathview_start_year
anchors.fill: parent
model:listmodel_year
delegate: com_delegate_year
pathItemCount: 3
preferredHighlightBegin: 0.5
preferredHighlightEnd: 0.5
path: Path{
startX: parent.width / 10
startY: -30
PathLine{x:parent.width / 10; y:25}
PathLine{x:parent.width / 10; y:45}
PathLine{x:parent.width / 10; y:65}
}
onCurrentIndexChanged: {
if ((currentIndex + 2019)%4 == 0)//润年
{
if (pathview_start_month.currentIndex == 1 && listmodel_start_day.count == 28)//2月
{
listmodel_start_day.insert(28, {startdname:"29"})
}
}else{
if (pathview_start_month.currentIndex == 1 && listmodel_start_day.count == 29)//2月
{
listmodel_start_day.remove(28)
}
}
}
}
}
Rectangle{//起始年label
id: label_home_date_start_year
height: rec_home_date_start_year.height
width: height
anchors.left: rec_home_date_start_year.right
anchors.top: rec_home_date_start_year.top
Text {
text: qsTr("年")
anchors.centerIn: parent
}
}
Rectangle{//起始月
id: rec_home_date_start_month
height: rec_home_date_start_year.height
width: height
anchors.left: label_home_date_start_year.right
anchors.top: label_home_date_start_year.top
Image {
source: "images/calendar.png"
anchors.fill: parent
}
PathView{
id: pathview_start_month
anchors.fill: parent
model: listmodel_start_month
delegate: com_delegate_start_month
pathItemCount: 3
preferredHighlightBegin: 0.5
preferredHighlightEnd: 0.5
path: Path{
startX: parent.width / 20
startY: -30
PathLine{x:parent.width / 20; y:25}
PathLine{x:parent.width / 20; y:45}
PathLine{x:parent.width / 20; y:65}
}
onCurrentIndexChanged: {//
console.log("取余: " + (pathview_start_year.currentIndex + 2019)%4)
if (currentIndex == 1)//2月
{//2月上下都为31天
if ((pathview_start_year.currentIndex + 2019)%4 == 0)//润年
{
listmodel_start_day.remove(30)//31日
listmodel_start_day.remove(29)//30日
}else{
listmodel_start_day.remove(30)//31日
listmodel_start_day.remove(29)//30日
listmodel_start_day.remove(28)//29日
}
}else if (currentIndex == 3 || currentIndex == 5 || currentIndex == 8 || currentIndex == 10){//4、6、9、11月,30天
listmodel_start_day.remove(30)//30天这些月份,之前之后的月份都是31天
}else if (currentIndex == 0 || currentIndex == 2 || currentIndex == 4 || currentIndex == 6 || currentIndex == 7 || currentIndex == 9 || currentIndex == 11){
//1、3、5、7、8、10、12月
if (listmodel_start_day.count == 28)
{
listmodel_start_day.insert(28, {startdname:"29"})
listmodel_start_day.insert(29, {startdname:"30"})
listmodel_start_day.insert(30, {startdname:"31"})
}else if (listmodel_start_day.count == 29){
listmodel_start_day.insert(29, {startdname:"30"})
listmodel_start_day.insert(30, {startdname:"31"})
}else if (listmodel_start_day.count == 30){
listmodel_start_day.insert(30, {startdname:"31"})
}
}
}
}
}
Rectangle{//起始月label
id: label_home_date_start_month
height: rec_home_date_start_month.height
width: height
anchors.left: rec_home_date_start_month.right
anchors.top: rec_home_date_start_month.top
Text {
text: qsTr("月")
anchors.centerIn: parent
}
}
Rectangle{//起始日
id:rec_home_date_start_day
height: rec_home_date_start_month.height
width: height
anchors.left: label_home_date_start_month.right
anchors.top: label_home_date_start_month.top
Image {
source: "images/calendar.png"
anchors.fill: parent
}
PathView{
id: pathview_start_day
anchors.fill: parent
model: listmodel_start_day
delegate: com_delegate_start_day
pathItemCount: 3
preferredHighlightBegin: 0.5
preferredHighlightEnd: 0.5
path: Path{
startX: parent.width / 20
startY: -30
PathLine{x:parent.width / 20; y:25}
PathLine{x:parent.width / 20; y:45}
PathLine{x:parent.width / 20; y:65}
}
}
}
Rectangle{//起始月label
id: label_home_date_start_day
height: rec_home_date_start_day.height
width: height
anchors.left: rec_home_date_start_day.right
anchors.top: rec_home_date_start_day.top
Text {
text: qsTr("日")
anchors.centerIn: parent
}
}
效果就是开始的图那样了
附参考:
https://my.oschina.net/u/1170641/blog/285004?p={
{page}}
https://blog.csdn.net/foruok/article/details/38060495
下面这个链接的效果更好
http://www.qter.org/portal.php?mod=view&aid=20
文章浏览阅读620次。1. 先建立模型;2. 再在建立好的模型的各个区域中内制定特性;一般需要指定的特性有:1. 单元类型;2. 选项;3. 单元坐标系;4. 实常数;5. 材料性质。3. 通过 GUI 为模型中的各个区域赋予特性。4. 可以通过以下命令为模型的各个区域赋予特性:ASEL >> 选择..._ansys的电磁场建模
文章浏览阅读125次。1.max_element()函数和min_element()函数,就是找最大值最小值,数组:int position=max_element(a,a+n)-a;//返回在数组中的下标int data=*max_element(a,a+n);//返回值容器: int position=max_element(v.begin(), v.end())-v.begin(); int it..._int b = max_element(a, a+4) - a;
文章浏览阅读4.7k次,点赞3次,收藏13次。SDK和JDK获取:链接:https://pan.baidu.com/s/1PI54NAVJCNFpV7cPfBkg5w提取码:k4bd1、下载JDK,安装jdk8.152版本配置环境变量:在系统变量中添加:1、变量名:Java_home; 变量值:C:\Program Files\Java\jre1.8.0_152(jdk安装路径)2、变量名:ClassPath; 变量值:.;..._unity 2018.3.1 用哪个版本的jdk
文章浏览阅读2.1k次,点赞4次,收藏19次。Map简介HashMapTreeMapMap 的遍历小结Map 是一组成对的“键值对”对象,允许使用键 (key) 来查找值 (value)。它提供了一个映射表,可以通过某个对象来查找另一个对象。它也被称作关联数组,因为它将某些对象与另外一些对象关联在一起;或者称作字典,通过键对象来查找值对象,就像在字典中使用单词来定义一样。Map 基本特性:以 key-value 键值对的形式存储数据,..._介绍一下map
文章浏览阅读357次。兄弟Brother MFC-9140CDN打印机驱动官方版是一款专业实用的驱动程序,兄弟Brother MFC-9140CDN打印机驱动官方版可以适用于型号为MFC-9140CDN的打印机,兄弟BrotherMFC-9140CDN打印机驱动最新版主要用于解决打印机无法被电脑识别的问题,增加打印机使用的稳定性。基本参数产品定位多功能商用一体机产品类型彩色激光多功能一体机涵盖功能打印/复印..._兄弟mfc9140cdn链接打印机
文章浏览阅读3.9k次。在SecureCRT这样的ssh登录软件里, 通过在Linux界面里输入rz/sz命令来上传/下载文件.对于Debian, rz/sz默认没有安装所以需要手工安装. sz: 将选定的文件发送(send)到本地机器; rz:运行该命令会弹出一个文件选择窗口, 从本地选择文件上传到服务器(receive). 1. 软件安装 把安装文件上传到/tmp目录下. # cd /tm_debian rz
文章浏览阅读1.2k次。现在大部分用户都会使用无线连接来上网,使用电脑的朋友可能会遇上无线无法连接,Wifi连接不上的一些问题,这时相信很多朋友都会无从下手,不知道如何解决,其实通过以下5招就可以完美解决了,遇上无线连接不上的朋友赶紧来学习一下吧。第一招、无线网卡驱动问题无线网卡驱动出现问题肯定会导致上不了网,解决起来也不难。1、右键单击“开始”按钮并从菜单中选择“设备管理器”,启动到设备管理器窗口后,展开“网络适配器”..._win10无线网卡连不上wifi
文章浏览阅读122次。欢迎加入技术交流群群号: 552340860一、FFmpeg程序的使用(ffmpeg.exe, ffplay.exe, ffprobe.exe)本章主要介绍一下ffmpeg工程包含的三个exe的使用方法。ffmpeg的官方网站是:http://ffmpeg.org/编译好的可用版本的下载地址: http://ffmpeg.zeranoe.com/builds/根据平台自行下载对应的版本,如图所示..._php ffplay
文章浏览阅读4.1k次,点赞3次,收藏7次。python数字转百分比%,保留小数点后两位zrs = 215nan = 100nan_zb = "%.2f"%(float(nan/zrs)*100)+"%"print(type(nan_zb))print("男生占总人数的: ",nan_zb)#结果:# <class 'str'># 男生占总人数的: 46.51%_python百分数保留两位小数
文章浏览阅读1.1k次,点赞3次,收藏6次。Resnet50介绍Resnet50与之前在Resnet34中介绍的几乎一样,唯一有区别的就是:残差块由两层卷积变成了三层卷积,网络更深,如下:# 结构快def block(x, filters, strides=1, conv_short=True): if conv_short: short_cut = Conv2D(filters=filters*4, kernel_size=1, strides=strides, padding='valid')(x) _resnet50花卉图像识别
文章浏览阅读332次。Download.javapackage com.wansha;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.util.Log;import android.view.View;import android..._安卓 多文件下载
文章浏览阅读267次。我正在尝试校准相机,使用AruCo标记进行头部姿势估计 . 我尝试在C中通过OpenCV库进行校准但没有成功,所以我使用MATLAB相机校准工具箱校准了我的相机,我的AruCo标记检测代码在C中,需要相机矩阵和失真系数作为参数 . 我的问题是如何在标记检测功能中加载这些参数 . 我尝试将相机矩阵和失真系数存储在数组中,它显示错误“ argument of type int is incompati..._argument of type "int **" is incompatible with parameter of type "int *