当前位置: 首页 > news >正文

常用界面设计组件 —— 时间日期与定时器

    • 2.7 时间日期与定时器
      • 2.7.1 时间日期相关的类
      • 2.7.2 日期时间数据与字符串之间的 转换
      • 2.7.3 QCalendarWidget日历组件
      • 2.7.4 定时器

2.7 时间日期与定时器

2.7.1 时间日期相关的类

时间日期是经常遇到的数据类型,Qt中时间日期类型的 类如下:

  • QTime ,时间数据类型, 仅表示时间, 如 18:08:08。
  • QDate, 日期数据类型, 仅表示日期, 如2023-7- 21。
  • QDateTime ,日期时间数据类型,表示日期和时 间, 如2023-07-21 18:08:08。

QT中有专门用于日期、时间编辑和显示的界面组件,如 下:

  • QTimeEdit, 编辑显示时间的组件。
  • QDateEdit, 编辑和显示日期的组件。
  • QDateTimeEdit, 编辑和显示日期时间的组件。
  • QCalendarWidget, 一个用日历形式选择日期日期的 组件。

定时器是用来处理周期性事件的一种对象,类似于硬件 定时器。例如设置一个定时器的定时周期为1000毫秒, 那么每1000毫秒就会发射定时器的timeout()信号,在 信号关联的槽函数里就可以做相应的处理。Qt中的定时 器类为QTimer,它直接从QObject类继承而来,不是界面 组件类。

2.7.2 日期时间数据与字符串之间的 转换

设计如下图所示对话框

在这里插入图片描述

QDateEdit和QTimeEdit都从QDateTimeEdit继承而 来,实现针对日期或时间的特定显示功能。实际上 QDateEdit和QTimeEdit的显示功能都可以通过 QDateTimeEdit实现,只需要设置好属性即可。

在这里插入图片描述

时间日期转字符串的函数:

QString QDateTime::toString(const QString &format) const

设置“读取当前日期时间”按钮对应的槽函数

#include "widget.h"
#include "ui_widget.h"
#include <QDateTime>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{// 初始化界面ui->setupUi(this);
}Widget::~Widget()
{// 释放ui指针delete ui;
}void Widget::on_pushButton_set_data_time_2_clicked()
{// 获取当前日期时间QDateTime curDateTime = QDateTime::currentDateTime();// 设置时间编辑框的时间为当前时间ui->timeEdit->setTime(curDateTime.time());// 将当前时间格式化为字符串,设置到文本编辑框中ui->lineEdit_time->setText(curDateTime.toString("hh:mm:ss"));// 设置日期编辑框的日期为当前日期ui->dateEdit->setDate(curDateTime.date());// 将当前日期格式化为字符串,设置到文本编辑框中ui->lineEdit_data->setText(curDateTime.toString("yyyy-MM-dd"));// 设置日期时间编辑框的日期和时间为当前日期时间ui->dateTimeEdit->setDateTime(curDateTime);// 将当前日期时间格式化为字符串,设置到文本编辑框中ui->lineEdit_data_time->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"));
}

字符串转时间日期的函数:

//将格式化的字符串转换为QDateTime对象
QDateTime QDateTime::fromString(const QString &string, const QString &format)
void Widget::on_pushButton_set_time_clicked()
{// 获取时间字符串QString str = ui->lineEdit_time->text();//将字符串前后的空格去掉str = str.trimmed();// 如果字符串为空,直接返回if (str.isEmpty()) {return;}// 将字符串转换为QDateTime对象,使用格式"hh:mm:ss"QDateTime datetime = QDateTime::fromString(str, "hh:mm:ss");// 设置时间到UI的TimeEdit控件ui->timeEdit->setDateTime(datetime);
}void Widget::on_pushButton_set_data_time_clicked()
{// 获取日期时间字符串QString str = ui->lineEdit_data_time->text();str = str.trimmed();// 如果字符串为空,直接返回if (str.isEmpty()) {return;}// 将字符串转换为QDateTime对象,使用格式"yyyy-MM-dd hh:mm:ss"QDateTime datetime = QDateTime::fromString(str, "yyyy-MM-dd hh:mm:ss");// 设置日期时间到UI的DateTimeEdit控件ui->dateTimeEdit->setDateTime(datetime);
}void Widget::on_pushButton_set_data_clicked()
{// 获取日期字符串QString str = ui->lineEdit_data->text();str = str.trimmed();// 如果字符串为空,直接返回if (str.isEmpty()) {return;}// 将字符串转换为QDateTime对象,使用格式"yyyy-MM-dd"QDateTime datetime = QDateTime::fromString(str, "yyyy-MM-dd");// 设置日期到UI的DateEdit控件ui->dateEdit->setDateTime(datetime);
}

2.7.3 QCalendarWidget日历组件

在这里插入图片描述

#include "mainwindow.h"
#include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{// 初始化MainWindowui->setupUi(this);// 连接日历选择变化信号与槽函数connect(ui->calendarWidget, SIGNAL(selectionChanged()), SLOT(on_calendarWidget_selectionChanged()));
}MainWindow::~MainWindow()
{// 释放内存delete ui;
}void MainWindow::on_calendarWidget_selectionChanged()
{// 获取选中的日期QDate date = ui->calendarWidget->selectedDate();// 将日期转换为指定格式的字符串并显示在LineEdit中ui->lineEdit->setText(date.toString("yyyy-MM-dd"));
}

2.7.4 定时器

Qt中的定时器类是QTimer。QTimer不是一个可见的界 面组件,在UI设计器的组件面板里找不到它。QTimer主 要的属性是interval,是定时中断的周期,单位是毫秒。 QTimer主要的信号是timeout(),在定时中断时发射此信号,要想在定时中断里做出响应,这就需要编写 timeout()信号的槽函数。 QElapsedTimer 用于快速计算两个事件的间隔时间,它 没有父类,不支持 Qt 的元对象系统,QElapsedTimer 的 主要接口函数定义如下:

void start() //复位并启动计时器
qint64 elapsed() //返回流逝的时间,单位:毫秒
qint64 nsecsElapsed() //返回流逝的时间,单位:纳秒
qint64 restart() //重新启动计时器

在这里插入图片描述

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include <QTimer>
#include <QElapsedTimer>QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic:// 构造函数MainWindow(QWidget *parent = nullptr);// 析构函数~MainWindow();private slots:// 开始按钮点击时的槽函数void on_pushButton_start_clicked();// 停止按钮点击时的槽函数void on_pushButton_stop_clicked();// spinBox值改变时的槽函数void on_spinBox_valueChanged(int arg1);// 定时器的timeout信号对应的槽函数void on_timeout();private:Ui::MainWindow *ui; // UI指针QTimer timer;       // 定时器QElapsedTimer counter; // 计时器
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"#include <QTime>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{// 初始化MainWindowui->setupUi(this);// 设置定时器的时间间隔为spinBox的值timer.setInterval(ui->spinBox->value());// 连接定时器的timeout信号与槽函数on_timeoutconnect(&timer, SIGNAL(timeout()), this, SLOT(on_timeout()));
}MainWindow::~MainWindow()
{// 释放内存delete ui;
}void MainWindow::on_timeout()
{// 获取当前时间QTime curTime = QTime::currentTime();// 在LCD显示小时、分钟、秒ui->lcd_hour->display(curTime.hour());ui->lcd_min->display(curTime.minute());ui->lcd_sec->display(curTime.second());
}void MainWindow::on_pushButton_start_clicked()
{// 启动定时器和计时器,禁用相关控件// 启动定时器、计时器timer.start();counter.start();// 禁用开始按钮、停止按钮、时间间隔输入框ui->pushButton_start->setEnabled(false);ui->pushButton_stop->setEnabled(true);ui->spinBox->setEnabled(false);// 清空显示结果的LineEditui->lineEdit->setText("");
}void MainWindow::on_pushButton_stop_clicked()
{// 停止定时器,计算经过的时间并显示在LineEdit中,启用相关控件// 停止定时器timer.stop();// 获取经过的总毫秒数int msec = counter.elapsed();// 计算秒和毫秒int ms = msec % 1000;int sec = msec / 1000;// 格式化文本,显示在LineEdit中QString text = QString::asprintf("%d秒,%d毫秒", sec, ms);ui->lineEdit->setText(text);// 启用停止按钮、开始按钮、时间间隔输入框ui->pushButton_stop->setEnabled(false);ui->pushButton_start->setEnabled(true);ui->spinBox->setEnabled(true);
}void MainWindow::on_spinBox_valueChanged(int arg1)
{// spinBox值改变时更新定时器的时间间隔timer.setInterval(arg1);
}

相关文章:

常用界面设计组件 —— 时间日期与定时器

2.7 时间日期与定时器2.7.1 时间日期相关的类2.7.2 日期时间数据与字符串之间的 转换2.7.3 QCalendarWidget日历组件2.7.4 定时器 2.7 时间日期与定时器 2.7.1 时间日期相关的类 时间日期是经常遇到的数据类型&#xff0c;Qt中时间日期类型的 类如下&#xff1a; QTime &…...

GO 中高效 int 转换 string 的方法与高性能源码剖析

文章目录 使用 strconv.Itoa使用 fmt.Sprintf使用 strconv.FormatIntFormatInt 深入剖析1. 快速路径处理小整数2. formatBits 函数的高效实现 结论 Go 语言 中&#xff0c;将整数&#xff08;int&#xff09;转换为字符串&#xff08;string&#xff09;是一项常见的操作。 本文…...

YOLOv7调用摄像头检测报错解决

yolov7detect.py文件调用本地摄像头&#xff0c;把source参数设为0 parser.add_argument(--source, typestr, default0, helpsource) # file/folder, 0 for webcam 报错&#xff1a;cv2.error: OpenCV(3.4.2) 一堆地址:The function is not implemented. Rebuild the library…...

Git学习 -- 分支合并、版本修改相关

目录 learn GIT Learn Git Branching merge和rebase的使用 基础命令 版本回退 工作区和暂存区 管理修改 撤销修改 删除修改 learn GIT Learn Git Branching 这是Gitee上的Git学习教程 Learn Git Branching Git Rebase Learn Git Branching 最终的实操 merge和rebase的…...

【小呆的力学笔记】弹塑性力学的初步认知二:应力应变分析(2)

文章目录 1.4 主应力空间、八面体应力1.5 应变分析1.6 特殊应力、应变定义 1.4 主应力空间、八面体应力 一点的应力状态不论如何变化&#xff0c;其主应力和主方向一致的话&#xff0c;该点的应力状态就是唯一确定的。因此&#xff0c;我们用主应力方向建立一个三维坐标系来描…...

【学网攻】 第(6)节 -- 三层交换机实现VLAN间路由

文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan【学网攻】 第(5)节 -- Cisco VTP的使用 前言 网络已经成为了我们生活中不可或缺的一部分&#xff0c;它连接了…...

C++之内联函数

函数调用在执行时&#xff0c;首先要在栈中为形参和局部变量分配存储空间&#xff0c;然后还要将实参的值复制给形参&#xff0c;接下来还要将函数的返回地址&#xff08;该地址指明了函数执行结束后&#xff0c;程序应该回到哪里继续执行&#xff09;放入栈中&#xff0c;最后…...

【Bugku-web】alert

1.打开场景 2.按"CtrlU"查看源代码 3.翻到页面最末尾会有一个HTML实体编码&#xff0c;用在线工具在线Html实体编码解码后&#xff0c;得到flag值。...

QQ数据包解密

Windows版qq数据包格式&#xff1a; android版qq数据包格式&#xff1a; 密钥&#xff1a;16个0 算法&#xff1a;tea_crypt算法 pc版qq 0825数据包解密源码&#xff1a; #include "qq.h" #include "qqcrypt.h" #include <WinSock2.h> #include…...

腾讯云上linux系统使用nginx,flask构建个人网站SSL证书过期换证书的操作步骤

ssl证书过期的时候&#xff0c;一般腾讯云提前一段时间给通知&#xff0c;让更换ssl证书&#xff0c;现在一般都可以免费更换&#xff0c;一般是一年期的&#xff0c;审核通过之后&#xff0c;需要下载nginx版本的证书&#xff0c;我的是4个文件&#xff0c;替换到nginx/cert文…...

git-clone的single-branch操作回退

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 最近使用git越来越多&#xff0c;一些git的功能使用也更熟悉了一些。 之前使用了single-branch下载分支&#xff0c;后来想取消掉&#xff0c;但怎么做呢&#xff0c;查了一些资料之后&#xff0c;了解到了怎么做&#x…...

03 SpringBoot实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)

1.1 自动展示所有信息 需求描述: 进入新闻首页portal/findAllType, 自动返回所有栏目名称和id 接口描述 url地址&#xff1a;portal/findAllTypes 请求方式&#xff1a;get 请求参数&#xff1a;无 响应数据&#xff1a; 成功 {"code":"200","mes…...

YOCTO基础 - 创建meta层与bb文件

背景 在当前的嵌入式系统开发项目中&#xff0c;我们面临着构建定制化 Linux 发行版以满足项目需求的挑战。我们需要在目标硬件上运行一个轻量级、高度定制化的 Linux 映像&#xff0c;并确保它包含我们项目中所需的特定软件包和功能。为了实现这一目标&#xff0c;我们选择了…...

网络电视盒子哪个好?博主分享超高性价比网络电视盒子推荐

电视盒子是我们使用最多的数码产品&#xff0c;年货节很多朋友在纠结网络电视盒子哪个好&#xff0c;我这次的测评产品就是电视盒子&#xff0c;按照18款电视盒子的深度测评结果整理了网络电视盒子推荐&#xff0c;想知道网络电视盒子哪个好可以看看下面这五款电视盒子。 一&am…...

leetcode 刷题2

二分查找的绝妙运用&#xff1a; 看到有序数列&#xff0c;算法复杂度 0033. 搜索旋转排序数组 class Solution { public:int search(vector<int>& nums, int target) {int left 0;int right nums.size() - 1;while (left < right) {int mid left (right - …...

2-SAT问题相关理论和算法

前言 SAT 问题简介 SAT是可满足性、适定性(Satisfiability)问题的简称。一般形式为k-适定性问题或k-可满足性问题&#xff0c;简称 k-SAT。 何为布尔可满足性问题&#xff1f;给定一条真值表达式&#xff0c;包含逻辑变量、逻辑与、逻辑或以及非运算符&#xff0c;如&#x…...

【大数据精讲】全量同步与CDC增量同步方案对比

目录 背景 名词解释 问题与挑战 FlinkCDC DataX 工作原理 调度流程 五、DataX 3.0六大核心优势 性能优化 背景 名词解释 CDC CDC又称变更数据捕获&#xff08;Change Data Capture&#xff09;&#xff0c;开启cdc的源表在插入INSERT、更新UPDATE和删除DELETE活动时…...

自定义通用返回对象

目的&#xff1a;给返回对象补充一些信息&#xff0c;告诉前端这个请求在业务层面上是成功还是失败&#xff0c;以及具体的描述信息。 我们需要自定义错误码&#xff08;因为前端的HTTP状态码默认的值比较少&#xff09;和正常错误返回类。 ErrorCode &#xff1a; package …...

从0开始python学习-51.pytest之接口加密封装

目录 MD5加密 base64加密 rsa加密 MD5加密 1. 封装加密方法 def md5_encode(self,data):data str(data).encode("utf-8")md5_data hashlib.md5(data).hexdigest()return md5_data 2. 写入需要使用加密的接口yaml用例 -request:method: posturl: http://192.168.…...

c++的命名空间

命名空间 一.c的关键字二.命名空间2.1 命名空间定义2.1 命名空间的使用2.1.1加命名空间名称及作用域限定符2.1.2使用using将命名空间中某个成员引入 三.标准命名空间std 一.c的关键字 c中一共有63个关键字 关键字11111asmdoifreturntrycontinueautodoubleinlineshorttypedeff…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

【分享】推荐一些办公小工具

1、PDF 在线转换 https://smallpdf.com/cn/pdf-tools 推荐理由&#xff1a;大部分的转换软件需要收费&#xff0c;要么功能不齐全&#xff0c;而开会员又用不了几次浪费钱&#xff0c;借用别人的又不安全。 这个网站它不需要登录或下载安装。而且提供的免费功能就能满足日常…...

基于Springboot+Vue的办公管理系统

角色&#xff1a; 管理员、员工 技术&#xff1a; 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能&#xff1a; 该办公管理系统是一个综合性的企业内部管理平台&#xff0c;旨在提升企业运营效率和员工管理水…...

Sklearn 机器学习 缺失值处理 获取填充失值的统计值

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...

无需布线的革命:电力载波技术赋能楼宇自控系统-亚川科技

无需布线的革命&#xff1a;电力载波技术赋能楼宇自控系统 在楼宇自动化领域&#xff0c;传统控制系统依赖复杂的专用通信线路&#xff0c;不仅施工成本高昂&#xff0c;后期维护和扩展也极为不便。电力载波技术&#xff08;PLC&#xff09;的突破性应用&#xff0c;彻底改变了…...

mcts蒙特卡洛模拟树思想

您这个观察非常敏锐&#xff0c;而且在很大程度上是正确的&#xff01;您已经洞察到了MCTS算法在不同阶段的两种不同行为模式。我们来把这个关系理得更清楚一些&#xff0c;您的理解其实离真相只有一步之遥。 您说的“select是在二次选择的时候起作用”&#xff0c;这个观察非…...

rk3506上移植lvgl应用

本文档介绍如何在开发板上运行以及移植LVGL。 1. 移植准备 硬件环境:开发板及其配套屏幕 开发板镜像 主机环境:Ubuntu 22.04.5 2. LVGL启动 ​ 出厂系统默认配置了 LVGL,并且上电之后默认会启动 一个LVGL应用 。 LVGL 的启动脚本为/etc/init.d/pre_init/S00-lv_demo,…...

Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南

Spring Boot 中实现 HTTPS 加密通信及常见问题排查指南 在金融行业安全审计中&#xff0c;未启用HTTPS的Web应用被列为高危漏洞。通过正确配置HTTPS&#xff0c;可将中间人攻击风险降低98%——本文将全面解析Spring Boot中HTTPS的实现方案与实战避坑指南。 一、HTTPS 核心原理与…...

Flask与Celery 项目应用(shared_task使用)

目录 1. 项目概述主要功能技术栈 2. 项目结构3. 环境设置创建虚拟环境并安装依赖主要依赖 4. 应用配置Flask应用初始化 (__init__.py)Celery应用初始化 (make_celery.py) 5. 定义Celery任务 (tasks.py)任务说明 6. 创建API端点 (views.py)API端点说明 7. 前端界面 (index.html)…...