QT常用界面设计组件——时间日期和定时器

QT常用界面设计组件——时间日期和定时器

时间日期相关的类

QTime:时间数据类型,仅表示时间,如19:20QDate:日期数据类型,仅表示日期,如2019/6/1QDateTime:日期时间数据类型,表示时间和日期,如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()实现字符串和时间数据类型的信息互相转化

具体实现代码:

void Widget::on_btn_read_clicked()

{

//获取系统当前时间并转化为字符串

QDateTime curDateTime = QDateTime::currentDateTime(); //获取系统当前时间

ui->timeEdit->setTime(curDateTime.time());

ui->edit_time->setText(curDateTime.toString("hh:mm:ss"));

ui->dateEdit->setDate(curDateTime.date());

ui->edit_date->setText(curDateTime.toString("yy-mm-dd"));

ui->dateTimeEdit->setDateTime(curDateTime);

ui->edit_datetime->setText(curDateTime.toString("yy-mm-dd hh:mm:ss"));

}

void Widget::on_btn_settime_clicked()

{

//设置时间

QString str = ui->edit_time->text(); //获取edit_time中的数据

str = str.trimmed(); //去除首尾空格

if(!str.isEmpty())

{

//只有输入hh:mm:ss的字符串才能成功转化为时间

QDateTime datetime = QDateTime::fromString(str,"hh:mm:ss");

ui->timeEdit->setTime(datetime.time());

}

}

void Widget::on_btn_setdate_clicked()

{

//设置日期

QString str = ui->edit_date->text(); //获取edit_date中的数据

str = str.trimmed(); //去除首尾空格

if(!str.isEmpty())

{

//只有输入yyyy-mm-dd的字符串才能成功转化为日期

QDateTime datetime = QDateTime::fromString(str,"yyyy-mm-dd");

ui->dateEdit->setDate(datetime.date());

}

}

void Widget::on_btn_setdatetime_clicked()

{

//设置日期时间

QString str = ui->edit_date->text(); //获取edit_datetime中的数据

str = str.trimmed(); //去除首尾空格

if(!str.isEmpty())

{

//只有输入yyyy-mm-dd hh:mm:ss的字符串才能成功转化为日期时间

QDateTime datetime = QDateTime::fromString(str,"yyyy-mm-dd hh:mm:ss");

ui->dateTimeEdit->setDateTime(datetime);

}

}

QCalendarWidget日历组件

QCalendarWidget以日历的形式显示日期,可以用于日期的选择

QCalendarWidget有一个信号selectionChanged(),在日历上选择日期会发射该信号,为此信号编写槽函数如下:

void Widget::on_calendarWidget_selectionChanged()

{

//在日历上选择日期

QDate dt = ui->calendarWidget->selectedDate();

QString str = dt.toString("yyyy年M月dd日");

ui->edit_Calendar->setText(str);

}

定时器的使用

QT中的定时器类是QTimer。QTimer不是一个可见的界面组件,在UI设计界面也没有该组件

要想使用该组件,需要在窗口类Widget.h中增加如下定义

class Widget : public QWidget

{

Q_OBJECT

public:

explicit Widget(QWidget *parent = nullptr);

~Widget();

private slots:

void on_timer_timeout();

private:

Ui::Widget *ui;

QTimer *ftimer; //定时器类,需要添加#include

QTimer fTimerCounter; //计时器类

};

在窗口类的构造函数中添加如下定义:

Widget::Widget(QWidget *parent) :

QWidget(parent),

ui(new Ui::Widget)

{

ui->setupUi(this);

ftimer = new QTimer(this); //同样需要添加头文件#include

ftimer->stop();

ftimer->setInterval(1000); //设置定时器周期,单位毫秒

connect(ftimer,SIGNAL(timeout()),this,SLOT(on_timer_timeout()));

}

QTimer主要的属性是interval,是定时中断的周期,单位毫秒。QTimer的主要信号是timeout(),每隔一个周期就会发射此信号,为该信号编写槽函数

void Widget::on_timer_timeout()

{

//定时器中断响应函数

QTime curTime = QTime::currentTime(); //获取系统当前时间

ui->LCD_1->display(curTime.hour()); //让LCD_1显示当前小时数

ui->LCD_2->display(curTime.minute()); //让LCD_2显示当前分钟数

ui->LCD_3->display(curTime.second()); //让LCD_3显示当前秒数

int val = ui->progressBar->value();

val++; //计时器每触发一次槽函数,val++

if(val > 100)

val = 0;

ui->progressBar->setValue(val); //将进度条进度设置为val

}

控制定时器开始和结束以及设置周期的槽函数如下:

void Widget::on_btn_start_clicked()

{

//定时器开始按钮

ftimer->start();

fTimerCounter.start();

ui->btn_start->setEnabled(false); //点击开始按钮后再次点击不会重新开始

ui->btn_setperiod->setEnabled(false); //点击开始按钮后点击设置周期不会生效

ui->btn_end->setEnabled(true);

}

void Widget::on_btn_setperiod_clicked()

{

//设置周期

QString str = ui->spin_period->text(); //获取spin_period中的内容

if(!str.isEmpty())

ftimer->setInterval(str.toInt());

}

void Widget::on_btn_end_clicked()

{

//定时器停止按钮

ftimer->stop();

ui->btn_start->setEnabled(true);

ui->btn_setperiod->setEnabled(true);

ui->btn_end->setEnabled(false);

}

相关作品

歊热的解释及意思
365体育手机版官网

歊热的解释及意思

📅 09-21 👁️ 6433
水星路由器怎么隐藏wifi信号(水星路由器如何隐藏无线网)
365体育手机版官网

水星路由器怎么隐藏wifi信号(水星路由器如何隐藏无线网)

📅 09-12 👁️ 5114
特克斯县
365体育投注怎么玩

特克斯县

📅 07-05 👁️ 5863