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()实现字符串和时间数据类型的信息互相转化

具体实现代码:

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>
    QTimer fTimerCounter;   //计时器类
};

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

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    ftimer = new QTimer(this);      //同样需要添加头文件#include <QTimer>
    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);
}

 

  • 6
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
### 回答1: Qt界面设计常用库有很多,下面是一些比较经典的: 1. Qt Widgets:Qt Widgets是Qt提供的一组标准控件,包括按钮、标签、文本框和下拉菜单等。这些控件非常易于使用和拓展,是Qt界面设计的基础。 2. Qt Quick:Qt Quick是Qt提供的一种基于QML语言的新型用户界面展示技术,它使用了OpenGL渲染引擎来实现2D和3D图形的显示。Qt Quick使用起来非常灵活和快速,可以用来创建漂亮的动画效果和交互式用户界面。 3. Qt Style Sheets:Qt Style Sheets是Qt提供的一种CSS样式表语言,可以用来描述Qt控件的外观和行为。使用Qt Style Sheets可以方便地定制Qt控件的颜色、字体、背景等属性,实现精美的界面外观。 4. Qt Charts:Qt Charts是Qt提供的一个高品质的图表库,可以用来展示统计数据和趋势分析等信息。Qt Charts支持多种图表类型,包括折线图、柱状图、饼状图等,而且非常易于使用和定制。 5. Qt WebEngine:Qt WebEngine是Qt提供的一个基于Chromium的Web引擎,可以用来嵌入Web内容到Qt应用程序中。Qt WebEngine提供了强大的Web功能,包括HTML5、JavaScript和CSS等技术支持,可以让Qt应用程序更加灵活和互动。 ### 回答2: Qt是一个流行的跨平台框架,它被广泛用于开发各种类型的应用程序,包括桌面软件、嵌入式设备、移动应用等。Qt提供了一套丰富的GUI工具箱,让开发者可以方便地创建用户界面。下面介绍一些常用Qt库,它们具有经典的界面设计案例和强大的功能: 1. QtWidgets:Qt的主要GUI工具箱,提供了丰富的控件和布局选项,可用于创建各种类型的桌面应用程序。 2. QtQuick:一种基于QML语言的GUI工具箱,可用于创建现代风格的用户界面,包括动画、3D效果、触摸操作等。 3. QtCharts:一个基于Qt的图表库,可用于创建各种类型的图表,包括折线图、柱状图、饼图等。 4. QtWebEngine:一个用于集成Web内容的Qt模块,可用于创建桌面应用程序和嵌入式浏览器。 5. QtMultimedia:提供了一个跨平台的媒体框架,可以处理音频和视频数据,可用于创建各种类型的多媒体应用程序。 6. QtSerialPort:提供了一个用于串口通信的Qt模块,可用于创建一些特殊应用程序,如嵌入式设备和工业自动化控制系统。 这些Qt库都具有强大的功能和广泛的应用,是Qt界面设计经典案例中的常用工具库。开发者可以根据自己的需求选择合适的库和模块,以实现最佳效果的用户界面设计。 ### 回答3: Qt是一个跨平台的应用程序开发框架,拥有丰富的GUI库,可以用于设计各种风格的界面。下面是几个常用Qt界面设计经典案例常用库。 1. QtWidgets库:这是Qt中最常用的库,也是基本的视图控件库,它提供了大量用于创建传统桌面应用程序的UI元素和工具,比如按钮、文本框、标签、列表框等等。 2. QtQuick库:这是用于快速创建现代化图形用户界面(GUI)的Qt库。QtQuick提供了快速创建灵活、动态和响应式的图形用户界面和动画效果的工具。QML(Qt Meta-Object Language)是用于构建QtQuick应用程序的声明性语言。 3. QtWebKit库:这是一个Qt封装的Webkit库,它提供了一个可嵌入Web浏览器的框架,可以用于在你的Qt应用程序中嵌入Web浏览器控件。 4. QtMultimedia库:提供了创建媒体应用程序的工具和功能。其功能包括音频和视频内容的播放,录制和处理,同时还提供了音频和视频编解码、文件格式转换等支持。 5. QtCharts库:提供了创建各种图表的工具和功能。这个库支持多种图表类型,包括条形图、饼图、折线图等等。 以上是几个常用Qt界面设计经典案例常用库,使用它们可以轻松而快捷的设计出符合用户需求的界面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值