Qt|实现时间选择小功能

在软件开发过程中,QtDesigner系统给出的控件很多时候都无法满足炫酷的效果,前一段时间需要用Qt实现选择时间的小功能,今天为大家分享一下!

首先看一下时间效果吧!

如果有需要继续往下看下去哟~

功能

1:开发环境

win10环境下,VS2017 + Qt5.14.2

2:实现功能用到的重点功能

单个时间widget类名:QSingleSelectTimeWidget

2.1:获取实时时间。

既然想要改变时间,必须要有一个时间,在Demo中默认选用当前系统时间

QTime currentTime = QTime::currentTime();
QString qsCurrentTime = currentTime.toString("hh:mm:ss");
ui.labShowContent->setText(qsCurrentTime);

默认将数据展示到静态文本上,效果如图:

在响应“选择时间”按钮时,将实时时间传入widget中,作为初始值。

2.2:时间窗口设置。

看GIF效果,可以得出,小时数据、分钟数据、秒数据所用的效果都是一致的,那么,可以创建一个通用类,在内容进行小时、分钟、秒针区分。

设置枚举类型:

enum ENUM_TimeMode
{TimeMode_Hour, //小时TimeMode_Minute, //分钟TimeMode_Second, //秒钟
};

小时对应的时间范围:【0,14)

分钟、秒数对应的时间范围:【0,60)

实现核心代码,如下

void QSingleSelectTimeWidget::SetTimeChange(ENUM_TimeMode enumTime, int data)
{switch (enumTime){case QSingleSelectTimeWidget::TimeMode_Hour: //小时制度{//区间范围:[0-24)//设置:当前时间ui.labCurrent->setText(QString::number(data));//设置:上一个时间int nPreviousData = data == 0 ? 23 : (data - 1);ui.labPrevious->setText(QString::number(nPreviousData));//设置:下一个时间int nNextData = data == 23 ? 0 : (data + 1);ui.labNext->setText(QString::number(nNextData));}break;case QSingleSelectTimeWidget::TimeMode_Minute: //分钟制度case QSingleSelectTimeWidget::TimeMode_Second: //秒制度{//区间范围:[0-60)//设置:当前时间ui.labCurrent->setText(QString::number(data));//设置:上一个时间int nPreviousData = data == 0 ? 59 : (data - 1);ui.labPrevious->setText(QString::number(nPreviousData));//设置:下一个时间int nNextData = data == 59 ? 0 : (data + 1);ui.labNext->setText(QString::number(nNextData));}break;}
}

代码解析:

参数1(ENUM_TimeMode):表示需要变动的类型,因为三个类型用一个类表示。

参数2(int):该参数的数值代表了正在显示的时间。如图所示:

每次改变中间的数值,对应的上一个数值、下一个数据也随着变化。

2.3:滚轮事件实时更新时间展示。

随着鼠标滚轮的变化,对应的时间也会随着变化。实现代码:

void QSingleSelectTimeWidget::wheelEvent(QWheelEvent *event)
{QPoint ptDegrees = event->angleDelta();//当前 ptDegrees.y 大于0,滚轮放大,反之缩小if (ptDegrees.y() > 0){//滚轮向上this->OnBnClickedUp();}else{//滚轮向下this->OnBnClickedDown();}QWidget::wheelEvent(event);
}

2.4:响应数据减小变动

void QSingleSelectTimeWidget::OnBnClickedUp()
{//当前数值向上移动-1,获取上一个展示label的数值int nPreviousData = ui.labPrevious->text().toInt();m_nCurrentData = nPreviousData;//重新设置数据变化this->SetTimeChange(m_enumTime, m_nCurrentData);
}

2.5:响应数据增大变动

void QSingleSelectTimeWidget::OnBnClickedDown()
{//当前数值向上移动-1,获取下一个展示label的数值int nNextData = ui.labNext->text().toInt();m_nCurrentData = nNextData;//重新设置数据变化this->SetTimeChange(m_enumTime, m_nCurrentData);
}

3:创建整体日期选择创建以及功能设置

3.1:创建时分秒widget

.h中声明

QSingleSelectTimeWidget* m_widgetHour; //时
QSingleSelectTimeWidget* m_widgetMinute; //分
QSingleSelectTimeWidget* m_widgetSecond; //秒

.cpp中应用

//<widget>时
m_widgetHour = new QSingleSelectTimeWidget(this);
m_widgetHour->setGeometry(20, 30, 60, 200);
m_widgetHour->show();
//<widget>分
m_widgetMinute = new QSingleSelectTimeWidget(this);
m_widgetMinute->setGeometry(80, 30, 60, 200);
m_widgetMinute->show();
//<widget>秒
m_widgetSecond = new QSingleSelectTimeWidget(this);
m_widgetSecond->setGeometry(140, 30, 60, 200);
m_widgetSecond->show();

3.2:根据外部接口传入的时间分别设置时分秒具体数据

void QChildCaseTimeWidget::SetSelectNewCalendarTime(QString qsCurrentTime)
{//对传入的时间进行分割QStringList listTime = qsCurrentTime.split(":");if (listTime.size() < 3){return; //时间格式不对,不处理}//设置:小时QString qsHour = listTime[0];m_widgetHour->SetCurrentShowTime(QSingleSelectTimeWidget::TimeMode_Hour, qsHour.toInt());//设置:分钟QString qsMinute = listTime[1];m_widgetMinute->SetCurrentShowTime(QSingleSelectTimeWidget::TimeMode_Minute, qsMinute.toInt());//设置:秒钟QString qsSecond = listTime[2];m_widgetSecond->SetCurrentShowTime(QSingleSelectTimeWidget::TimeMode_Second, qsSecond.toInt());
}

3.3:点击“确认”按钮发送完整新时间

void QChildCaseTimeWidget::OnBnClickedOK()
{//组装数据进行发送int nHour = m_widgetHour->GetCurrentContent();int nMinute = m_widgetMinute->GetCurrentContent();int nSecond = m_widgetSecond->GetCurrentContent();QString qsGroup = QString::number(nHour).rightJustified(2, '0') + QStringLiteral(":") + QString::number(nMinute).rightJustified(2, '0') + QStringLiteral(":") + QString::number(nSecond).rightJustified(2, '0');emit Msg_SendNewCalendarTime(qsGroup);QWidget::close();
}

外界调用时,只需要响应Msg_SendNewCalendarTime信号就可以更新展示时间了

今天的功能就更新到这里喽,有需要源码的同学,exe的打包环境已经配置完成,直接可以运行哟~

可以点击下面链接进行下载:

Qt中实现自定义时间选择功能icon-default.png?t=N7T8https://download.csdn.net/download/qq_32716885/88807282

我是糯诺诺米团,一名C++开发程序媛~

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

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

相关文章

如何连接ChatGPT?无需科学上网,使用官方GPT教程

随着AI的发展&#xff0c;ChatGPT也越来越强大了。 它可以帮你做你能想到的几乎任何事情&#xff0c;妥妥的生产力工具。 然而&#xff0c;对于许多国内的用户来说&#xff0c;并不能直接使用ChatGPT&#xff0c;不过没关系&#xff0c;我最近发现了一个可以直接免科学上网连…

阿里云ECS服务器Linux安装Mysql8

链接&#xff1a;https://pan.baidu.com/s/1s9j7OhiOMV9e9Qq9GDbysA 提取码&#xff1a;dd5a --来自百度网盘超级会员V5的分享 Mysql官网:MySQL 关于Mysql Yum Repository介绍可以看下 更加简单 关于X86和ARM 传到服务器 进入所在包 cd /usr/local/develop/mysql8 解压 …

电力负荷预测 | 基于AE-LSTM的电力负荷预测(Python)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | 基于AE-LSTM的电力负荷预测(Python) 基于AE-LSTM(自动编码器长短期记忆网络)的电力负荷预测是一种基于深度学习的方法,用于预测未来一段时间内的电力负荷需求。该方法结合了自动编码器和LSTM网…

c#cad 创建-点(六)

运行环境 vs2022 c# cad2016 调试成功 一、代码说明 创建一个点的命令方法。代码的主要功能是在当前活动文档中创建一个点&#xff0c;并将其添加到模型空间块表记录中。 代码的主要步骤如下&#xff1a; 获取当前活动文档、数据库和编辑器对象。使用事务开始创建点的过程…

docker部署docker运维工具

简介 主要功能:管理容器,管理镜像,管理容器网络 安装 拉取镜像 docker pull joinsunsoft/docker.ui:1.0.1 启动容器 docker run -d --name docker.ui --restart always -v /var/run/docker.sock:/var/run/docker.sock -p 10039:8999 joinsunsoft/docker.ui:1.0.1 使用 打…

电力负荷预测 | 基于GRU门控循环单元的深度学习电力负荷预测,含预测未来(Python)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | 基于GRU门控循环单元的深度学习电力负荷预测,含预测未来(Python&

Pymysql之Cursor常用API

Cursor常用API 1、cursor.execute(query, argsNone)&#xff1a;执行sql语句。 参数: query (str)&#xff1a;sql语句。 args (tuple, list or dict)&#xff1a;sql语句中如果有变量&#xff0c;或者格式化输出&#xff0c;会在这里填充数据。 Returns&#xff1a;返…

【退役之重学前端】vite, vue3, vue-router, vuex, ES6学习日记

学习使用vitevue3的所遇问题总结&#xff08;2024年2月1日&#xff09; 组件中使用<script>标签忘记加 setup 这会导致Navbar 没有暴露出来&#xff0c;导致使用不了&#xff0c;出现以下报错 这是因为&#xff0c;如果不用setup&#xff0c;就得使用 export default…

一文学会Axios的使用

异步请求 同步发送请求过程如下 浏览器页面在发送请求给服务器&#xff0c;在服务器处理请求的过程中&#xff0c;浏览器页面不能做其他的操作。只能等到服务器响应结束后才能&#xff0c;浏览器页面才能继续做其他的操作。 异步发送请求过程如下浏览器页面发送请求给服务器&…

ownips的自救指南:一次账号封停事件的心路历程与解决策略

前言 小明以前是全球500强电商类公司的运营工作人员&#xff0c;在事业的上升期日入斗金、年薪百万&#xff0c;后面分钱时被产品、总监、老板瓜分了大头&#xff0c;大气都大敢出。由于小明掌握了核心技术&#xff0c;从联系品牌供应商、电商选品、用户行为调研、用户画像收集…

c入门第十篇——指针入门

一句话来说: 指针就是存储了内存地址值的变量。 在前面讨论传值和传址的时候&#xff0c;我们就已经开始使用了指针来传递地址。 在正式介绍指针之前&#xff0c;我们先来简单了解一下内存。内存可以简单的理解为一排连续的房子的街道&#xff0c;每个房子都有自己的地址&#…

ACK One Argo工作流:实现动态 Fan-out/Fan-in 任务编排

作者&#xff1a;庄宇 什么是 Fan-out Fan-in 在工作流编排过程中&#xff0c;为了加快大任务处理的效率&#xff0c;可以使用 Fan-out Fan-in 任务编排&#xff0c;将大任务分解成小任务&#xff0c;然后并行运行小任务&#xff0c;最后聚合结果。 由上图&#xff0c;可以使…

13. UE5 RPG限制Attribute的值的范围以及生成结构体

前面几章&#xff0c;我们实现了通过GameplayEffect对Attribute值的修改&#xff0c;比如血量和蓝量&#xff0c;我们都是有一个最大血量和最大蓝量去限制它的最大值&#xff0c;而且血量和蓝量最小值不会小于零。之前我们是没有实现相关限制的&#xff0c;接下来&#xff0c;我…

React实例之完善布局菜单(一)

今天我们来用所学的知识来做一个布局菜单的组件, 针对这个组件我之前写过一个教程 React之布局菜单-CSDN博客&#xff0c;那个呢比较基础&#xff0c;这节课算是对那个教程的一个扩展和补充。这个实例讲完&#xff0c;这个系列就算告一段落了。先看效果 这个教程要求对React知识…

猫头虎分享已解决Bug ‍ || TypeError: Object of type ‘int64‘ is not JSON serializable

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

redis特点

一、redis线程模型有哪些&#xff0c;单线程为什么快&#xff1f; 1、IO模型维度的特征 IO模型使用了多路复用器&#xff0c;在linux系统中使用的是EPOLL 类似netty的BOSS,WORKER使用一个EventLoopGroup(threads1) 单线程的Reactor模型&#xff0c;每次循环取socket中的命令…

一篇文章理解时间复杂度和空间复杂度

今天也是很开心的学到了数据结构&#xff0c;也是打算把我自己对知识的理解给写出来了。第一篇数据结构开始咯。开始之前我们先理解一个概念。 什么是算法效率&#xff1f; 算法效率是指算法执行的速度或完成任务所需的资源&#xff08;如时间和空间&#xff09;的度量。它通…

字节3面真题,LeetCode上hard难度,极具启发性题解

文章目录 &#x1f680;前言&#x1f680;LeetCode&#xff1a;41. 缺失的第一个正整数&#x1f680;思路&#x1f680;整个代码思路串一下&#x1f680;Code &#x1f680;前言 铁子们好啊&#xff01;阿辉来讲道题&#xff0c;这道题据说是23年字节3面真题&#xff0c;LeetC…

jmeter的简单使用

1、打开jmeter 打开Jmeter 安装包&#xff0c;进入\bin 中&#xff0c;找到“ApacheJMeter.jar”或"jmeter.bat", 双击打开即可 2、建立线程组 如下图所示&#xff0c;右击TestPlan&#xff0c;点击ADD->Threads(Users)->ThreadGroup 线程组页面分析&#xf…

数字图像处理实验记录六(图像的傅里叶变换和频域处理)

前言&#xff1a; 一、基础知识 1&#xff0c;傅里叶变换是什么 傅里叶变换是一种线性积分变换&#xff0c;通俗来说&#xff0c;通过傅里叶变换就是把一段信号分解成若干个简谐波。 二、实验要求 1&#xff0e;产生一幅如图所示亮块图像f(x,y)&#xff08;256256 大小、…