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.hqwc.cn/news/454655.html

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

相关文章

Vue-easy-tree封装及使用

1.使用及安装 下载依赖 npm install wchbrad/vue-easy-tree引入俩种方案 1.在main.js中引入 import VueEasyTree from "wchbrad/vue-easy-tree"; import "wchbrad/vue-easy-tree/src/assets/index.scss" Vue.use(VueEasyTree)2.当前页面引入 import VueEa…

PiflowX新增Apache Beam引擎支持

参考资料&#xff1a; Apache Beam 架构原理及应用实践-腾讯云开发者社区-腾讯云 (tencent.com) 在之前的文章中有介绍过&#xff0c;PiflowX是支持spark和flink计算引擎&#xff0c;其架构图如下所示&#xff1a; 在piflow高度抽象的流水线组件的支持下&#xff0c;我们可以…

2024第九届国际发酵培养基应用与发展技术论坛会议通知

会议简介 随着科技的不断发展,发酵技术已逐渐成为生物制造中的重要支撑&#xff0c;发酵技术应用领域更加广泛。发酵培养基是影响生物发酵产业技术水平、环境友好程度的重要因素之一&#xff0c;为进一步推动发酵培养基的科学应用&#xff0c;提升发酵培养基的高效、稳定应用&…

电商推荐系统

此篇博客主要记录一下商品推荐系统的主要实现过程。 一、获取用户对商品的偏好值 代码实现 package zb.grms;import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.conf.Configured; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.Doub…

开发大佬为什么都不喜欢关电脑?

引言 在平时工作中&#xff0c;咱们程序员这一群体往往展现出一些特有的行为习惯&#xff0c;其中之一便是不喜欢频繁地关闭电脑、拒绝关机、长久待机、特别是苹果的机器。 下面从技术分析与用户行为研究的角度出发&#xff0c;将深入探讨程序员倾向于保持电脑开机状态的原因…

数字孪生网络攻防模拟与城市安全演练

在数字化浪潮的推动下&#xff0c;网络攻防模拟和城市安全演练成为维护社会稳定的不可或缺的环节。基于数字孪生技术我们能够在虚拟环境中进行高度真实的网络攻防模拟&#xff0c;为安全专业人员提供实战经验&#xff0c;从而提升应对网络威胁的能力。同时&#xff0c;在城市安…

P60_ib公式推导2

永磁无刷直流电机B相电流值推导过程&#xff08;t2过程&#xff09;

RabbitMQ-1.介绍与安装

介绍与安装 1.RabbitMQ1.0.技术选型1.1.安装1.2.收发消息1.2.1.交换机1.2.2.队列1.2.3.绑定关系1.2.4.发送消息 1.2.数据隔离1.2.1.用户管理1.2.3.virtual host 1.RabbitMQ 1.0.技术选型 消息Broker&#xff0c;目前常见的实现方案就是消息队列&#xff08;MessageQueue&…

springboot155基于JAVA语言的在线考试与学习交流网页平台

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

智能优化算法 | Matlab实现飞蛾扑火(MFO)(内含完整源码)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 智能优化算法 | Matlab实现飞蛾扑火(MFO)(内含完整源码) 源码设计 %%%% clear all clc SearchAgents_no=100; % Number of search ag

Photoshop 2023下载安装教程,免费直装版,2步搞定安装,附安装包

准备工作&#xff1a; 1、提前准备好photoshop 2023安装包 没有的可以参考下面方式获取 2、系统要求Windows 10 及以上 安装步骤 1.找到下载好的安装包&#xff0c;直接双击解压 2.双击运行【Set-up.exe】文件 3.点击文件夹图标&#xff0c;更改安装位置 4.点击【继续】&a…

服务攻防-端口协议桌面应用QQWPS等RCEhydra口令猜解未授权检测

知识点&#xff1a; 1、端口协议-弱口令&未授权&攻击方式等 2、桌面应用-社交类&文档类&工具类等 章节点&#xff1a; 1、目标判断-端口扫描&组合判断&信息来源 2、安全问题-配置不当&CVE漏洞&弱口令爆破 3、复现对象-数据库&中间件&…