常用界面设计组件 —— 时间日期与定时器
- 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…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
centos 7 部署awstats 网站访问检测
一、基础环境准备(两种安装方式都要做) bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats࿰…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
