【QML】定时时间控制控件

news/2025/4/3 0:38:56/文章来源:https://www.cnblogs.com/Zhouce/p/18804360

代码:

  1 import QtQuick 2.15
  2 import QtQuick.Controls 2.15
  3 
  4 ApplicationWindow {
  5     width: 500
  6     height: 300
  7     visible: true
  8     title: "飞行时间设置"
  9 
 10     // 自定义时间选择组件
 11     Component {
 12         id: timeComponent
 13         Row {
 14             spacing: 15
 15             id: timeRow  // 添加根元素ID
 16             property int currentHour: 0
 17             property int currentMinute: 0
 18             property string selectedPart: "hour"
 19 
 20             // 时间显示区域
 21             Row {
 22                 spacing: 5
 23                 // 小时显示
 24                 Rectangle {
 25                     width: 60
 26                     height: 50
 27                     color: mouseHour.containsMouse ? "#e0e0e0" : "transparent"
 28                     border.color: timeRow.selectedPart === "hour" ? "blue" : "transparent"
 29 
 30                     Text {
 31                         text: timeRow.currentHour.toString().padStart(2, '0')  // 使用ID访问
 32                         font.pixelSize: 28
 33                         anchors.centerIn: parent
 34                     }
 35 
 36                     MouseArea {
 37                         id: mouseHour
 38                         anchors.fill: parent
 39                         hoverEnabled: true
 40                         onClicked: timeRow.selectedPart = "hour"
 41                     }
 42                 }
 43 
 44                 Text {
 45                     text: ""
 46                     font.pixelSize: 24
 47                     anchors.verticalCenter: parent.verticalCenter
 48                 }
 49 
 50                 // 分钟显示
 51                 Rectangle {
 52                     width: 60
 53                     height: 50
 54                     color: mouseMinute.containsMouse ? "#e0e0e0" : "transparent"
 55                     border.color: timeRow.selectedPart === "minute" ? "blue" : "transparent"
 56 
 57                     Text {
 58                         text: timeRow.currentMinute.toString().padStart(2, '0')  // 使用ID访问
 59                         font.pixelSize: 28
 60                         anchors.centerIn: parent
 61                     }
 62 
 63                     MouseArea {
 64                         id: mouseMinute
 65                         anchors.fill: parent
 66                         hoverEnabled: true
 67                         onClicked: timeRow.selectedPart = "minute"
 68                     }
 69                 }
 70 
 71                 Text {
 72                     text: ""
 73                     font.pixelSize: 24
 74                     anchors.verticalCenter: parent.verticalCenter
 75                 }
 76             }
 77 
 78             // 共用控制按钮
 79             Column {
 80                 spacing: 10
 81                 anchors.verticalCenter: parent.verticalCenter
 82 
 83                 Button {
 84                     width: 50
 85                     height: 40
 86                     text: "+"
 87                     font.pixelSize: 20
 88                     onClicked: {
 89                         if(timeRow.selectedPart === "hour") {
 90                             timeRow.currentHour = (timeRow.currentHour + 1) % 24
 91                         } else {
 92                             timeRow.currentMinute = (timeRow.currentMinute + 1) % 60
 93                         }
 94                     }
 95                 }
 96 
 97                 Button {
 98                     width: 50
 99                     height: 40
100                     text: "-"
101                     font.pixelSize: 20
102                     onClicked: {
103                         if(timeRow.selectedPart === "hour") {
104                             timeRow.currentHour = (timeRow.currentHour - 1 + 24) % 24
105                         } else {
106                             timeRow.currentMinute = (timeRow.currentMinute - 1 + 60) % 60
107                         }
108                     }
109                 }
110             }
111         }
112     }
113     Column {
114         anchors.centerIn: parent
115         spacing: 30
116 
117         // 起始时间
118         Column {
119             spacing: 10
120             Label {
121                 text: "起始飞行时间"
122                 font.bold: true
123                 font.pixelSize: 16
124             }
125 
126             Loader {
127                 sourceComponent: timeComponent
128                 id: startTimeLoader
129                 onLoaded: {
130                     item.currentHour = 13
131                     item.currentMinute = 15
132                 }
133             }
134         }
135 
136         // 结束时间
137         Column {
138             spacing: 10
139             Label {
140                 text: "结束飞行时间"
141                 font.bold: true
142                 font.pixelSize: 16
143             }
144 
145             Loader {
146                 sourceComponent: timeComponent
147                 id: endTimeLoader
148                 onLoaded: {
149                     item.currentHour = 15
150                     item.currentMinute = 0
151                 }
152             }
153         }
154     }
155 
156     // 时间校验逻辑
157     Connections {
158         target: startTimeLoader.item
159         function onCurrentHourChanged() { validateTime() }
160         function onCurrentMinuteChanged() { validateTime() }
161     }
162 
163     Connections {
164         target: endTimeLoader.item
165         function onCurrentHourChanged() { validateTime() }
166         function onCurrentMinuteChanged() { validateTime() }
167     }
168 
169     function validateTime() {
170         if (!startTimeLoader.item || !endTimeLoader.item) return;
171 
172         let start = startTimeLoader.item.currentHour * 60 + startTimeLoader.item.currentMinute
173         let end = endTimeLoader.item.currentHour * 60 + endTimeLoader.item.currentMinute
174 
175         if (end < start) {
176             endTimeLoader.item.currentHour = startTimeLoader.item.currentHour
177             endTimeLoader.item.currentMinute = startTimeLoader.item.currentMinute
178         }
179     }
180 }

效果:

 功能:可增减、结束时间大于起始时间、可选择时分进行增减

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/909560.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ollama本地部署qwen2.5

一、概述 Ollama 是一个开源的本地大语言模型运行框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计。支持多种操作系统,包括 macOS、Windows、Linux 以及通过 Docker 容器运行。Ollama 提供对模型量化的支持,可以显著降低显存要求,使得在普通家用计算机上运行…

天下拍-艺术品拍卖经典案例分享

在当今快速发展的数字化时代,艺术品拍卖行业正经历着前所未有的变革。天下拍作为一款功能齐全的拍卖产品,凭借先进的技术平台和专业的服务团队,为艺术品拍卖提供了全新的解决方案。同步拍卖的模式和互联网运营工具的加持可以帮助您实现艺术品的高效变现和价值最大化。线上线…

[T.4] 团队项目:团队代码管理准备

项目 内容这个作业属于哪个课程 2025年春季软件工程(罗杰、任健)这个作业的要求在哪里 [T.4] 团队项目:团队代码管理准备我在这个课程的目标是 掌握代码管理与修复流程,完善团队协作机制这个作业在哪个具体方面帮助我实现目标 团队协作,软件开发代码管理基础团队代码仓库地…

asio使用async_connect,连接127.0.0.1,函数回调函数errorcode连接成功

编译运行rest_rpc库的客户端出现问题 asio使用async_connect,连接127.0.0.1,函数回调函数errorcode连接成功(没有启动服务器的情况下),需要等到调用发送函数,才会失败。调试发现是使用9000端口被本机另外的程序占用了-_- 环境:win10 netstat -ano | findstr "9000&…

算法备案没产品可以申请吗?

算法备案复审阶段涉及产品信息填报,所以一度让一些开发者有这样的错误认知:只有等产品要上线了,才能火急火燎地去申请算法备案。但这个观点其实是错误的,其实开发者也可以在没有具体产品的情况下发起算法备案申请。只要材料合法合规,也能取得备案号。下面是一些具体信息介…

工业通信协议“牵手密码”,Ethernet IP转Profinet网关的桥梁魔法

在当前工业自动化领域,实时以太网技术已经成为至关重要的通信标准之一。Profinet和EtherNetIP作为两种广泛采用的实时以太网协议,各自拥有其独特的性能优势和适用场景。本文旨在探讨稳联技术Profinet转EtherNetIP网关WL-PN-EIPM的功能,并评估其在节能实施与监测方面的应用价…

LeetCode刷题-动态规划-爬楼梯

LeetCode刷题-动态规划-爬楼梯 题目: 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? 示例 1: 输入:n = 2 输出:2 解释:有两种方法可以爬到楼顶。1 阶 + 1 阶 2 阶 示例 2:输入:n = 3 输出:3 解释:有…

【攻防世界】Hidden-Message

⭕、知识点 流量分析/端口号隐写/tshark/json文件处理 一、题目二、解法 1、端口号个位呈现有规律的01交替,可能隐藏信息。 2、为便于提取信息,使用kali的tshark对其进行转存 tshark -r input.pcap -T json > output.txt注意在使用tshark时应避免使用root账户 否则会出现如…

022 props组件交互

.vue 的文件,就是一个组件,每个.vue 文件就是每个页面html 的时候,每个页面都是一个 htmlvue2 和 vue3 的生命周期钩子是不同的components:常用的组件,公共的组件views:用来存放页面的新建项目,删除HelloWorld.vue components也删除views删除 这个index.js删除 这两页面…

客户端打开BI报表提示 Your current browser is not supported”

win7的打开会报这个问题, win11可以正常打开, 应该是环境差异导致。

Linux-常用命令(3)

Linux-常用命令(3)Linux常用命令 查看文件 cat命令 cat命令可以创建一个或者多个文件、查看文件内容、连接文件,常用于查看文件内容 cat 文件名 //显示文件内容 cat -n 文件名 //显示文件内容,并显示行号 cat - 文件名 //显示文件内容(包括不可见字符)系统时间 date命令…