QT常⽤界⾯设计组件——时间⽇期和定时器
时间⽇期相关的类
QTime:时间数据类型,仅表⽰时间,如19:20
QDate:⽇期数据类型,仅表⽰⽇期,如2019/6/1
QDateTime:⽇期时间数据类型,表⽰时间和⽇期,如2019-6-1 19:20
QT中专门⽤于时间、⽇期编辑显⽰的组件
QTimeEdit:编辑和显⽰时间的组件
QDateEdit:编辑和显⽰⽇期的组件
QDateTimeEdit:编辑和显⽰时间和⽇期的组件
QCalendarWidget:⽤⽇历形式选择时间的组件
定时器是⽤来处理周期性事件的⼀种对象,类似于硬件定时器。在设置周期时间后,每隔⼀个周期便会
发送⼀个timeout()信号,在信号的关联槽函数中就可以做出相应的处理。Qt中的定时器类是QObject类继承⽽来,不上界⾯组件类
实例运⾏效果:
⽇期时间数据与字符串之间的转换
QDateEdit和QTimeEdit的显⽰功能都可以通过QDateTimeEdit实现
1.QDateTimeEdit类的主要属性:
datetime:时间⽇期
date:⽇期,设置datetime会⾃动改变date;同样,设置date也会使得datetime⾃动改变
time:时间,设置datetime会⾃动改变time;同样,设置time也会使得datetime⾃动改变
maximumDateTime、minimumDateTime,最⼤最⼩时间⽇期
maximumDate(time)、minimumDate(time)同上
currentSection:⽤于显⽰输⼊光标所在的时间⽇期数据段,QTimeDateEdit显⽰时间⽇期时可以分为多个段(年/⽉/⽇),单击编辑框右侧的上下按钮可以修改当前段的值
displayFormat:显⽰格式,⽇期时间数据的显⽰格式,"yyyy-mm-dd HH:mm:ss"则显⽰效果为2019-06-1 19:20:12
2.时间数据的获取与转化
使⽤QDateTime::currentDateTime()可以获取当前系统时间,获取之后可以使⽤QDateTime::toString和QDateTime::formString()实现字符串和时间数据类型的信息互相转化
具体实现代码:
1void Widget::on_btn_read_clicked()
2{
3 //获取系统当前时间并转化为字符串
4 QDateTime curDateTime = QDateTime::currentDateTime(); //获取系统当前时间
5 ui->timeEdit->setTime(curDateTime.time());
6 ui->edit_time->String("hh:mm:ss"));
7 ui->dateEdit->setDate(curDateTime.date());
8 ui->edit_date->String("yy-mm-dd"));
9 ui->dateTimeEdit->setDateTime(curDateTime);
10 ui->edit_datetime->String("yy-mm-dd hh:mm:ss"));
11}
12
13void Widget::on_btn_settime_clicked()
14{
15 //设置时间
16 QString str = ui->edit_time->text(); //获取edit_time中的数据
17 str = immed(); //去除⾸尾空格
18 if(!str.isEmpty())
19 {
20 //只有输⼊hh:mm:ss的字符串才能成功转化为时间
21 QDateTime datetime = QDateTime::fromString(str,"hh:mm:ss");
22 ui->timeEdit->setTime(datetime.time());
23 }
24}
25
26void Widget::on_btn_setdate_clicked()
27{
28 //设置⽇期
29 QString str = ui->edit_date->text(); //获取edit_date中的数据
30 str = immed(); //去除⾸尾空格
31 if(!str.isEmpty())
32 {
33 //只有输⼊yyyy-mm-dd的字符串才能成功转化为⽇期
34 QDateTime datetime = QDateTime::fromString(str,"yyyy-mm-dd");
35 ui->dateEdit->setDate(datetime.date());
36 }
37}
38
39void Widget::on_btn_setdatetime_clicked()
40{
41 //设置⽇期时间
42 QString str = ui->edit_date->text(); //获取edit_datetime中的数据
43 str = immed(); //去除⾸尾空格
44 if(!str.isEmpty())
45 {
46 //只有输⼊yyyy-mm-dd hh:mm:ss的字符串才能成功转化为⽇期时间
47 QDateTime datetime = QDateTime::fromString(str,"yyyy-mm-dd hh:mm:ss");
48 ui->dateTimeEdit->setDateTime(datetime);
49 }
50}
QCalendarWidget⽇历组件
QCalendarWidget以⽇历的形式显⽰⽇期,可以⽤于⽇期的选择
QCalendarWidget有⼀个信号selectionChanged(),在⽇历上选择⽇期会发射该信号,为此信号编写槽函数如下:
1void Widget::on_calendarWidget_selectionChanged()
2{
3 //在⽇历上选择⽇期
4 QDate dt = ui->calendarWidget->selectedDate();
5 QString str = dt.toString("yyyy年M⽉dd⽇");
6 ui->edit_Calendar->setText(str);
7}
定时器的使⽤
QT中的定时器类是QTimer。QTimer不是⼀个可见的界⾯组件,在UI设计界⾯也没有该组件
要想使⽤该组件,需要在窗⼝类Widget.h中增加如下定义
1class Widget : public QWidget
2{
3 Q_OBJECT
4
5public:
6 explicit Widget(QWidget *parent = nullptr);
7 ~Widget();
8
9private slots:
10 void on_timer_timeout();
11private:
12 Ui::Widget *ui;
13
14 QTimer *ftimer; //定时器类,需要添加#include <QTimer>
timeout on t2 timer15 QTimer fTimerCounter; //计时器类
16};
在窗⼝类的构造函数中添加如下定义:
1Widget::Widget(QWidget *parent) :
2 QWidget(parent),
3 ui(new Ui::Widget)
4{
5 ui->setupUi(this);
6
7 ftimer = new QTimer(this); //同样需要添加头⽂件#include <QTimer>
8 ftimer->stop();
9 ftimer->setInterval(1000); //设置定时器周期,单位毫秒
10 connect(ftimer,SIGNAL(timeout()),this,SLOT(on_timer_timeout()));
11}
QTimer主要的属性是interval,是定时中断的周期,单位毫秒。QTimer的主要信号是timeout(),每隔⼀个周期就会发射此信号,为该信号编写槽函数
1void Widget::on_timer_timeout()
2{
3 //定时器中断响应函数
4 QTime curTime = QTime::currentTime(); //获取系统当前时间
5 ui->LCD_1->display(curTime.hour()); //让LCD_1显⽰当前⼩时数
6 ui->LCD_2->display(curTime.minute()); //让LCD_2显⽰当前分钟数
7 ui->LCD_3->display(curTime.second()); //让LCD_3显⽰当前秒数
8
9 int val = ui->progressBar->value();
10 val++; //计时器每触发⼀次槽函数,val++
11 if(val > 100)
12 val = 0;
13 ui->progressBar->setValue(val); //将进度条进度设置为val
14}
控制定时器开始和结束以及设置周期的槽函数如下:
1void Widget::on_btn_start_clicked()
2{
3 //定时器开始按钮
4 ftimer->start();
5 fTimerCounter.start();
6
7 ui->btn_start->setEnabled(false); //点击开始按钮后再次点击不会重新开始
8 ui->btn_setperiod->setEnabled(false); //点击开始按钮后点击设置周期不会⽣效
9 ui->btn_end->setEnabled(true);
10}
11
12void Widget::on_btn_setperiod_clicked()
13{
14 //设置周期
15 QString str = ui->spin_period->text(); //获取spin_period中的内容
16 if(!str.isEmpty())
17 ftimer->Int());
18}
19
20void Widget::on_btn_end_clicked()
21{
22 //定时器停⽌按钮
23 ftimer->stop();
24 ui->btn_start->setEnabled(true);
25 ui->btn_setperiod->setEnabled(true);
26 ui->btn_end->setEnabled(false);
27}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论