常用界面设计组件 —— 时间日期与定时器
- 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…...
为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?
在建筑行业,项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升,传统的管理模式已经难以满足现代工程的需求。过去,许多企业依赖手工记录、口头沟通和分散的信息管理,导致效率低下、成本失控、风险频发。例如&#…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
MySQL中【正则表达式】用法
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例: 一、基础语法 SELECT column_name FROM table_name WHERE column_name REGEXP pattern; …...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
用机器学习破解新能源领域的“弃风”难题
音乐发烧友深有体会,玩音乐的本质就是玩电网。火电声音偏暖,水电偏冷,风电偏空旷。至于太阳能发的电,则略显朦胧和单薄。 不知你是否有感觉,近两年家里的音响声音越来越冷,听起来越来越单薄? —…...
mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
Razor编程中@Html的方法使用大全
文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...
给网站添加live2d看板娘
给网站添加live2d看板娘 参考文献: stevenjoezhang/live2d-widget: 把萌萌哒的看板娘抱回家 (ノ≧∇≦)ノ | Live2D widget for web platformEikanya/Live2d-model: Live2d model collectionzenghongtu/live2d-model-assets 前言 网站环境如下,文章也主…...
DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态
前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...
