04-4_Qt 5.9 C++开发指南_时间日期与定时器

文章目录

  • 1. 时间日期相关的类
  • 2. 源码
    • 2.1 可视化UI设计
    • 2.2 dialog.h
    • 2.3 dialog.cpp

1. 时间日期相关的类

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

  • QTime:时间数据类型,仅表示时间,如 15:23:13。

  • QDate:日期数据类型,仅表示日期,如2017-4-5.

  • QDateTime:日期时间数据类型,表示日期和时间,如2017-03-23 08:12:43.

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

  • QTimeEdit: 编辑和显示时间的组件。

  • QDateEdit:编辑和显示日期的组件

  • QDateTimeEdit:编辑和显示日期时间的组件。

  • QCalendarWidget:一个用日历形式选择日期的组件。

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

实例程序 sammp4_5 演示这些时间日期相关类的使用,其运行时界面如图4-5 所示。

在这里插入图片描述

关于”日期时间数据与字符串之间的转换“、”QCalendarWidget 日历组件“、”定时器的使用“请参考源码及《Qt5.9 c++开发指南》

2. 源码

2.1 可视化UI设计

在这里插入图片描述

2.2 dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include    <QDialog>
#include    <QTimer>
#include    <QTime>namespace Ui {
class Dialog;
}class Dialog : public QDialog
{Q_OBJECT
private:QTimer *fTimer;  //定时器QTime   fTimeCounter;//计时器public:explicit Dialog(QWidget *parent = 0);~Dialog();private slots:void on_timer_timeout(); //定时器中断处理槽函数,手工定义void on_btnGetTime_clicked();//读取当前时间void on_calendarWidget_selectionChanged(); //Calender 选择日期void on_btnSetTime_clicked();  // 读取当前日期时间  按键void on_btnSetDate_clicked(); //设置日期  按键void on_btnSetDateTime_clicked();   //设置日期时间案件void on_btnSetIntv_clicked();   //设置周期  按键void on_btnStart_clicked();  //开始 定时器 按键void on_btnStop_clicked();      //停止定时器按键private:Ui::Dialog *ui;
};#endif // DIALOG_H

2.3 dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"#include    <QDateTime>
#include    <QString>Dialog::Dialog(QWidget *parent) :QDialog(parent),ui(new Ui::Dialog)
{ui->setupUi(this);fTimer=new QTimer(this);  //创建定时器fTimer->stop();fTimer->setInterval(1000);//设置定时周期,单位:毫秒connect(fTimer,SIGNAL(timeout()),this,SLOT(on_timer_timeout())); //关联定时器的信号与槽
}Dialog::~Dialog()
{delete ui;
}void Dialog::on_timer_timeout()
{ //定时器中断响应槽函数QTime curTime=QTime::currentTime(); //获取当前时间ui->LCDHour->display(curTime.hour()); //显示  小时ui->LCDMin->display(curTime.minute());//显示  分钟ui->LCDSec->display(curTime.second());//显示  秒int va=ui->progressBar->value(); //读取progressBar的数值va++;if (va>100)va=0;ui->progressBar->setValue(va); //设置progressBar的数值
}void Dialog::on_btnGetTime_clicked()
{ //获取当前日期时间,为三个专用编辑器设置日期时间数据,并转换为字符串在LineEdit里显示QDateTime curDateTime=QDateTime::currentDateTime(); //读取当前日期时间ui->timeEdit->setTime(curDateTime.time()); //设置时间ui->editTime->setText(curDateTime.toString("hh:mm:ss"));//转换为字符串显示ui->dateEdit->setDate(curDateTime.date());//设置日期ui->editDate->setText(curDateTime.toString("yyyy-MM-dd"));//转换为字符串显示ui->dateTimeEdit->setDateTime(curDateTime);//设置日期时间ui->editDateTime->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"));//转换为字符串显示
}void Dialog::on_calendarWidget_selectionChanged()
{ //在日历上选择日期QDate dt=ui->calendarWidget->selectedDate(); //读取选择的日期时间QString str=dt.toString("yyyy年M月d日");//转换为字符串ui->editCalendar->setText(str); //字符串显示日期
}void Dialog::on_btnSetTime_clicked()
{ //字符串转换为QTimeQString str=ui->editTime->text(); //读取字符串表示的时间//    str=str.trimmed();//去掉空格if (!str.isEmpty()){QTime tm=QTime::fromString(str,"hh:mm:ss"); //从字符串转换为QTimeui->timeEdit->setTime(tm); //设置时间}
}void Dialog::on_btnSetDate_clicked()
{//字符串转换为 QDateQString str=ui->editDate->text(); //读取字符串表示的日期
//    str=str.trimmed();//去掉空格if (!str.isEmpty()){QDate dt=QDate::fromString(str,"yyyy-MM-dd");//从字符串转换为 QDateui->dateEdit->setDate(dt);//设置日期}
}void Dialog::on_btnSetDateTime_clicked()
{//字符串转换为 QDateTimeQString str=ui->editDateTime->text();//读取字符串表示的日期str=str.trimmed();//去掉空格if (!str.isEmpty()){QDateTime datetime=QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss"); //从字符串转换为 QDateTimeui->dateTimeEdit->setDateTime(datetime);//设置日期时间}
}void Dialog::on_btnSetIntv_clicked()
{ //设置定时器周期fTimer->setInterval(ui->spinBoxIntv->value()); //设置定时器的周期
}void Dialog::on_btnStart_clicked()
{fTimer->start();//定时器开始工作fTimeCounter.start();//计时器开始工作
//更新各按键的状态ui->btnStart->setEnabled(false);ui->btnStop->setEnabled(true);ui->btnSetIntv->setEnabled(false);
}void Dialog::on_btnStop_clicked()
{fTimer->stop(); //定时器停止int tmMsec=fTimeCounter.elapsed();//毫秒数int ms=tmMsec%1000; //余数毫秒int sec=tmMsec/1000; //整秒QString str=QString::asprintf("流逝时间:%d 秒,%d 毫秒",sec,ms);ui->LabElapsTime->setText(str); //显示流逝的时间ui->btnStart->setEnabled(true); //更新按键状态ui->btnStop->setEnabled(false);ui->btnSetIntv->setEnabled(true);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/84884.html

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

相关文章

虹科方案 | 汽车总线协议转换解决方案

汽车总线&#xff1a; 汽车总线是一种用于在车辆电子系统中传输数据和控制信息的通信系统。它允许不同的电子控制单元&#xff08;ECU&#xff09;在车辆中相互通信&#xff0c;协调各个系统的操作&#xff0c;以实现功能的集成和协同工作。 在现代汽车中&#xff0c;综合通信…

微信公众号模板消息推送测试Python版无需服务器-保姆级教程

手上有个项目&#xff0c;是服务器挂着自动化的爬虫的&#xff0c;但我用的那个IP代理商没有用尽报警&#xff0c;导致几次IP用尽&#xff0c;程序爬不到数据&#xff0c;进程死循环了。之前想过发邮箱提醒我&#xff0c;但是邮箱把又不及时&#xff0c;老忘记看&#xff0c;因…

C语言必会题目(1)

W...Y的主页 &#x1f60a; 代码仓库分享❤️ 在学习语言时&#xff0c;最重要的就是练习&#xff0c;光听不练假把式。下面我就推荐一些C语言必会的题。 执行下面程序&#xff0c;正确的输出是&#xff08; &#xff09; int x5,y7; void swap() { int z; zx; xy; yz; } int…

数字孪生三剑客来了!MapGIS Earth for Unreal的自述

嗨&#xff0c;大家好&#xff01;我的名字叫MapGIS Earth for Unreal&#xff0c;是MapGIS数字孪生平台产品家族的一员。提起我&#xff0c;大家可能不熟悉&#xff0c;但是提起数字孪生&#xff0c;想必大家倍感兴趣。 数字孪生是充分利用物理模型、传感器更新、运行历史等数…

【git】解决遇到的问题

目录 一、error: RPC failed; curl 6 OpenSSL SSL_read: Connection was reset, errno 10054 二、error: RPC failed; curl 6 OpenSSL SSL_read: Connection was reset, errno 10054 一、error: RPC failed; curl 6 OpenSSL SSL_read: Connection was reset, errno 10054 报…

2023最新Windows编译ffmpeg详细教程,附msys2详细安装配置教程

安装MSYS2 msys2是一款跨平台编译套件&#xff0c;它模拟linux编译环境&#xff0c;支持整合mingw32和mingw64&#xff0c;能很方便的在windows上对一些开源的linux工程进行编译运行。 类似的跨平台编译套件有&#xff1a;msys&#xff0c;cygwin&#xff0c;mingw 优势&…

MySQL8的特性-MySQL8知识详解

MySQL是一个多用户、多线程的SQL数据库服务器。SQL&#xff08;结构化查询语言&#xff09;是世界上最流行和标准化的数据库语言。下面是MySQL的特性。 1、开源性&#xff1a;MySQL是一个开源的关系型数据库管理系统&#xff0c;可以免费使用和修改。 2、可靠性&#xff1a;M…

DOCKER的容器

1. 什么是Container&#xff08;容器&#xff09; 要有Container首先要有Image&#xff0c;也就是说Container是通过image创建的。 Container是在原先的Image之上新加的一层&#xff0c;称作Container layer&#xff0c;这一层是可读可写的&#xff08;Image是只读的&#xff0…

TOMCAT部署及优化(Tomcat配置文件参数优化,Java虚拟机(JVM)调优)

TOMCAT tomcat &#xff1a;是一个开放源代码的web应用服务器&#xff0c;基于java代码开发的。也可以理解为tomacat就是处理动态请求和基于java代码的页面开发。可以在html当中写入java代码&#xff0c;tomcat可以解析html页面当中的java&#xff0c;执行动态请求&#xff0c;…

Nvm安装与使用

【1】nvm下载地址 https://github.com/coreybutler/nvm-windows/releases 选择的是nvm-setup.exe 【2】安装nvm 打开cmd&#xff0c;输入命令nvm -v 查看nvm版本&#xff0c;出现如下界面说明成功 【3】nodejs 安装与管理 打开CMD命令&#xff0c;以管理员权限运行 1、…

如何维护自己的电脑

目录 1、关于电脑选择的建议 1.1、价格预算 1.2、明确需求 1.3、电脑配置 1.4、分辨率 1.5、续航能力 1.6、品牌选择 1.7、用户评测 1.8、各个电商平台对比 1.9、最后决策 2、我的选择 3、电脑保养 3.1 外部清洁 3.2 安装软件 3.3 优化操作系统 3.4 维护硬件设…

那些年的golang开发经验记录

goland 问题CreateProcess error216, 该版本的 %1 与你运行的 Windows 版本不兼容。请查看计算机的系统信息&#xff0c;然后联系软件发布者 Cannot run program "......" (in directory "D:\project\go\awesomeProject\src\test"): CreateProcess error2…

Linux系列:从0到1用Docker部署springboot项目

目录 1.前提条件 2.编写DockerFile镜像文件 3.打包SpringBoot项目 4.通过软件Xftp进行传输&#xff08;*&#xff09; 1.点击“文件-新建”​编辑 5.操作远程主机 1.docker构建 2.容器运行 6.容器的关闭和删除 1.前提条件 Linux、docker、xftp的安装、一台可以访问的远…

GIL 锁或将在 CPython 中成为可选项

哈喽大家好&#xff0c;我是咸鱼 几天前有媒体报道称&#xff0c;经过多次辩论&#xff0c;Python 指导委员会打算批准通过 PEP 703 提案&#xff0c;让 GIL&#xff08;全局解释器&#xff09;锁在 CPython 中成为一个可选项 PEP 703 提案主要目标是使 GIL 变成可选项&#…

flink如何监听kafka主题配置变更

背景&#xff1a; 从前一篇文章我们知道flink消费kafka主题时是采用的手动assign指定分区的方式&#xff0c;这种消费方式是不处理主题的rebalance操作的&#xff0c;也就是消费者组中即使有消费者退出或者进入也是不会触发消费者所消费的分区的&#xff0c;那么疑问就来了&am…

【CSS】背景图定位问题适配不同机型

需求 如图, 实现一个带有飘带的渐变背景 其中头像必须显示飘带凹下去那里 , 需要适配不同的机型, 一不下心容易错位 实现 因为飘带背景是版本迭代中更新的, 所以飘带和渐变背景实则两个div 飘带切图如下 , 圆形部分需要契合头像 <view class"box-bg"><…

【脚踢数据结构】链表(1)

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言,Linux基础,ARM开发板&#xff0c;软件配置等领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff01;送给自己和读者的一句鸡汤&#x1f914;&…

电脑麦克风没声音?

这3招就可以解决&#xff01; 在我们使用电脑录制视频时&#xff0c;有时会遇到一个令人头疼的问题&#xff1a;麦克风没有声音。那么&#xff0c;为什么会出现这种情况呢&#xff1f;更重要的是&#xff0c;我们应该如何解决这个问题呢&#xff1f;本文将介绍3种方法&#xf…

uniapp 使用canvas画海报(微信小程序)

效果展示&#xff1a; 项目要求&#xff1a;点击分享绘制海报&#xff0c;并实现分享到好友&#xff0c;朋友圈&#xff0c;并保存 先实现绘制海报 <view class"data_item" v-for"(item,index) in dataList" :key"index"click"goDet…