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小时内删除。