常用界面设计组件 —— 时间日期与定时器
- 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 时间日期相关的类 时间日期是经常遇到的数据类型,Qt中时间日期类型的 类如下: QTime &…...
GO 中高效 int 转换 string 的方法与高性能源码剖析
文章目录 使用 strconv.Itoa使用 fmt.Sprintf使用 strconv.FormatIntFormatInt 深入剖析1. 快速路径处理小整数2. formatBits 函数的高效实现 结论 Go 语言 中,将整数(int)转换为字符串(string)是一项常见的操作。 本文…...
YOLOv7调用摄像头检测报错解决
yolov7detect.py文件调用本地摄像头,把source参数设为0 parser.add_argument(--source, typestr, default0, helpsource) # file/folder, 0 for webcam 报错: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 主应力空间、八面体应力 一点的应力状态不论如何变化,其主应力和主方向一致的话,该点的应力状态就是唯一确定的。因此,我们用主应力方向建立一个三维坐标系来描…...
【学网攻】 第(6)节 -- 三层交换机实现VLAN间路由
文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan【学网攻】 第(5)节 -- Cisco VTP的使用 前言 网络已经成为了我们生活中不可或缺的一部分,它连接了…...
C++之内联函数
函数调用在执行时,首先要在栈中为形参和局部变量分配存储空间,然后还要将实参的值复制给形参,接下来还要将函数的返回地址(该地址指明了函数执行结束后,程序应该回到哪里继续执行)放入栈中,最后…...
【Bugku-web】alert
1.打开场景 2.按"CtrlU"查看源代码 3.翻到页面最末尾会有一个HTML实体编码,用在线工具在线Html实体编码解码后,得到flag值。...
QQ数据包解密
Windows版qq数据包格式: android版qq数据包格式: 密钥:16个0 算法:tea_crypt算法 pc版qq 0825数据包解密源码: #include "qq.h" #include "qqcrypt.h" #include <WinSock2.h> #include…...
腾讯云上linux系统使用nginx,flask构建个人网站SSL证书过期换证书的操作步骤
ssl证书过期的时候,一般腾讯云提前一段时间给通知,让更换ssl证书,现在一般都可以免费更换,一般是一年期的,审核通过之后,需要下载nginx版本的证书,我的是4个文件,替换到nginx/cert文…...
git-clone的single-branch操作回退
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu) 最近使用git越来越多,一些git的功能使用也更熟悉了一些。 之前使用了single-branch下载分支,后来想取消掉,但怎么做呢,查了一些资料之后,了解到了怎么做&#x…...
03 SpringBoot实战 -微头条之首页门户模块(跳转某页面自动展示所有信息+根据hid查询文章全文并用乐观锁修改阅读量)
1.1 自动展示所有信息 需求描述: 进入新闻首页portal/findAllType, 自动返回所有栏目名称和id 接口描述 url地址:portal/findAllTypes 请求方式:get 请求参数:无 响应数据: 成功 {"code":"200","mes…...
YOCTO基础 - 创建meta层与bb文件
背景 在当前的嵌入式系统开发项目中,我们面临着构建定制化 Linux 发行版以满足项目需求的挑战。我们需要在目标硬件上运行一个轻量级、高度定制化的 Linux 映像,并确保它包含我们项目中所需的特定软件包和功能。为了实现这一目标,我们选择了…...
网络电视盒子哪个好?博主分享超高性价比网络电视盒子推荐
电视盒子是我们使用最多的数码产品,年货节很多朋友在纠结网络电视盒子哪个好,我这次的测评产品就是电视盒子,按照18款电视盒子的深度测评结果整理了网络电视盒子推荐,想知道网络电视盒子哪个好可以看看下面这五款电视盒子。 一&am…...
leetcode 刷题2
二分查找的绝妙运用: 看到有序数列,算法复杂度 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-可满足性问题,简称 k-SAT。 何为布尔可满足性问题?给定一条真值表达式,包含逻辑变量、逻辑与、逻辑或以及非运算符,如&#x…...
【大数据精讲】全量同步与CDC增量同步方案对比
目录 背景 名词解释 问题与挑战 FlinkCDC DataX 工作原理 调度流程 五、DataX 3.0六大核心优势 性能优化 背景 名词解释 CDC CDC又称变更数据捕获(Change Data Capture),开启cdc的源表在插入INSERT、更新UPDATE和删除DELETE活动时…...
自定义通用返回对象
目的:给返回对象补充一些信息,告诉前端这个请求在业务层面上是成功还是失败,以及具体的描述信息。 我们需要自定义错误码(因为前端的HTTP状态码默认的值比较少)和正常错误返回类。 ErrorCode : 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…...
Zotero重复条目智能处理指南:从混乱到有序的文献管理解决方案
Zotero重复条目智能处理指南:从混乱到有序的文献管理解决方案 【免费下载链接】ZoteroDuplicatesMerger A zotero plugin to automatically merge duplicate items 项目地址: https://gitcode.com/gh_mirrors/zo/ZoteroDuplicatesMerger 学术研究中ÿ…...
崖山数据库-谓词没提前过滤优化器BUG
数据库版本崖山23.5.1 SQL> select * from v$version;BANNER VERSION_NUMBER ---------------------------------------------------------------- ----------------- Enterprise Edition Release 23.5.1.1…...
DRM驱动(三)之核心模块回调函数解析
1. DRM驱动回调函数的核心作用 如果你曾经在Linux系统下开发过显示驱动,一定会对DRM(Direct Rendering Manager)框架不陌生。作为现代Linux显示系统的核心,DRM框架通过一系列精心设计的回调函数,让硬件厂商能够灵活地适…...
Fay数字人框架终极指南:30分钟打造你的AI虚拟助手
Fay数字人框架终极指南:30分钟打造你的AI虚拟助手 【免费下载链接】Fay Fay 是一个开源的数字人类框架,集成了语言模型和数字字符。它为各种应用程序提供零售、助手和代理版本,如虚拟购物指南、广播公司、助理、服务员、教师以及基于语音或文…...
从手机端到边缘设备:聊聊轻量化模型设计中FLOPs、MACs和Params的权衡艺术
从手机端到边缘设备:轻量化模型设计中FLOPs、MACs和Params的权衡艺术 当我们在智能手机上使用人脸解锁功能,或是通过智能音箱与AI助手对话时,背后运行的往往是经过精心设计的轻量化神经网络模型。这些模型需要在有限的算力和内存资源下&#…...
别再死记硬背DAQmx流程了!LabVIEW数据采集核心逻辑拆解:以USB-6008正弦波实验为例
从设计模式视角重构LabVIEW数据采集:以USB-6008正弦波实验为例 当LabVIEW新手第一次接触DAQmx数据采集时,往往会被"创建任务→添加通道→配置时钟→开始任务→读取数据→清除任务"的固定流程所困扰。这种机械记忆不仅容易遗忘,更难…...
如何快速实现ngx-bootstrap国际化:多语言应用开发完整指南
如何快速实现ngx-bootstrap国际化:多语言应用开发完整指南 【免费下载链接】ngx-bootstrap Fast and reliable Bootstrap widgets in Angular (supports Ivy engine) 项目地址: https://gitcode.com/gh_mirrors/ng/ngx-bootstrap ngx-bootstrap作为Angular生…...
OpenClaw 的核心组件有哪些?请描述它们之间的关系
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:AI大模型原理和应用面试题 文章目录一、🍀OpenClaw 核心组件详解1.1 ☘️…...
【Java边缘运行时部署终极指南】:20年专家亲授5大避坑法则与3步极速上线实战
第一章:Java边缘运行时部署全景认知与演进脉络Java在边缘计算场景中的运行时部署正经历从传统云中心化架构向轻量、自治、低延迟方向的深刻演进。早期Java应用依赖完整JDK和重量级容器(如Tomcat)部署于虚拟机或Kubernetes集群,难以…...
基于偏振无关的传输相位调控技术,实现可见光超透镜的优化设计
基于传输相位的可见光超透镜 偏振无关搞过光学设计的工程师都知道,传统透镜那个笨重的曲面有多让人头疼。现在有了一种黑科技——可见光波段的超透镜,厚度只有几百纳米,却能实现传统透镜的光学效果。关键是这玩意儿还搞定了偏振相关性这个老大…...
