《 QT5.9 c++ 開發指南》 時間日期與定時器

本例子主要講述了時間日期的使用,這個例子寫的很久了,需要的可以下載項目可以好好理解。

下面我們來看數據界面吧:

對應的頭文件:

#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

 對應的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 fTimer;
    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"));//轉換爲字符串顯示

//    ui->LabDateTime->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()
{ //字符串轉換爲QTime
    QString str=ui->editTime->text(); //讀取字符串表示的時間
    //    str=str.trimmed();//去掉空格
    if (!str.isEmpty())
    {
        QTime tm=QTime::fromString(str,"hh:mm:ss"); //從字符串轉換爲QTime
        ui->timeEdit->setTime(tm); //設置時間
    }
}

void Dialog::on_btnSetDate_clicked()
{//字符串轉換爲 QDate
    QString str=ui->editDate->text(); //讀取字符串表示的日期
//    str=str.trimmed();//去掉空格
    if (!str.isEmpty())
    {
        QDate dt=QDate::fromString(str,"yyyy-MM-dd");//從字符串轉換爲 QDate
        ui->dateEdit->setDate(dt);//設置日期
    }
}

void Dialog::on_btnSetDateTime_clicked()
{//字符串轉換爲 QDateTime
    QString str=ui->editDateTime->text();//讀取字符串表示的日期
    str=str.trimmed();//去掉空格
    if (!str.isEmpty())
    {
        QDateTime datetime=QDateTime::fromString(str,"yyyy-MM-dd hh:mm:ss"); //從字符串轉換爲 QDateTime
        ui->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);
}

本例子主要講述了下面類的使用過程:

 鏈接:本文例子連接   提取碼:crwz 

 喜歡就關注我的博客,點贊,一起來學習,一起共同成長。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章