1. 程式人生 > >QT第五天

QT第五天

時間日期與定時器

時間日期相關的類

(https://blog.csdn.net/theRookie1/article/details/84672489)

時間日期資料與字串之間轉換

void Widget::on_pushButton_clicked()//獲取當前時間日期按鈕
{
    QDateTime curDateTime=QDateTime::currentDateTime();//通過QDateTime的currentDateTime獲得當前的日期時間,並賦值給curDateTime
    ui->timeEdit->setTime(curDateTime.time());//為時間編輯器設定當前的時間
    ui->editTime->setText(curDateTime.time().toString("hh:mm"));//將獲得的時間轉化為字串
    ui->dateEdit->setDate(curDateTime.date());//為日期編輯器設定當前的日期
    //ui->editDate->setText(curDateTime.date().toString("yyyy年MM月dd日"));//將獲得的日期轉化為字串
    ui->editDate->setText(curDateTime.date().toString("yyyy-MM-dd"));//將獲得的日期轉化為字串可以使用漢字如年,月,日
    ui->dateTimeEdit->setDateTime(curDateTime);//為日期時間編輯器設定當前的日期時間
    ui->editDateTime->setText(curDateTime.toString("yyyy-MM-dd hh:mm"));//將獲得的日期時間轉換為字串
    //日期顯示的格式符及其意義
    //d        天,不補零顯示,1-31
    //dd       天,補零顯示,01-31
    //M        月,不補零顯示,1-12
    //MM       月,補零顯示,01-12
    //yy       年,兩位顯示,00-99
    //yyyy     年,四位顯示,0000-9999
    //h        小時,不補零,0-23或1-12(如果顯示AM/PM)
    //hh       小時,補零,00-23或01-12(如果顯示AM/PM)
    //H        小時,不補零,0-23(即使顯示AM/PM)
    //HH       小時,補零,00-23(即使顯示AM/PM)
    //m        分鐘,不補零,0-59
    //mm       分鐘,補零,00-59
    //z        毫秒,不補零,0-999
    //zzz      毫秒,補零,000-999
    //AP或A    使用AM/PM顯示
    //ap或a    使用am/pm顯示
}


void Widget::on_pushButton_2_clicked()//設定時間
{
    QString str=ui->editTime->text();
    str=str.trimmed();//去除首尾的空格
    if(!str.isEmpty())
    {
        QTime time=QTime::fromString(str,"hh:mm");//將字串以一定的格式輸出
        ui->timeEdit->setTime(time);//在時間編輯器中顯示時間
    }
}


void Widget::on_pushButton_3_clicked()//設定日期
{
    QString str=ui->editDate->text();
    str=str.trimmed();
    if(!str.isEmpty())
    {
        QDate date=QDate::fromString(str,"yyyy-MM-dd");//這裡的格式應該和dateEdit格式相同
        ui->dateEdit->setDate(date);
    }
}


void Widget::on_pushButton_4_clicked()//設定日期時間
{
    QString str=ui->editDateTime->text();
    str=str.trimmed();
    if(!str.isEmpty())
    {
        QDateTime datetime=QDateTime::fromString(str,"yyyy-MM-dd hh:mm");//這裡的格式應該和dateTimeEdit格式相同
        ui->dateTimeEdit->setDateTime(datetime);
    }
}

QCalendarWidget日曆元件的使用

其中也包含了日期資料與字串的轉換

void Widget::on_calendarWidget_selectionChanged()//QCalendarWidget的selectionChanged()訊號
                                                 //在日曆上選擇的日期發生變化時會發射此訊號
{
    QDate date=ui->calendarWidget->selectedDate();
    //QString str=date.toString("yyyy-MM-dd");
    //ui->editCalendar->setText(str);
    ui->editCalendar->setText(date.toString("yyyy-MM-dd"));
}

定時器的使用

private:
    QTimer *fTimer;//定時器
    QTime  fTimeCount;//計時器
 void on_timer_timeout();//定時溢位處理槽函式
fTimer=new QTimer(this);//例項化物件
    fTimer->stop();
    fTimer->setInterval(1000);//設定定時週期,單位:毫秒
    connect(fTimer,SIGNAL(timeout()),this,SLOT(on_timer_timeout()));//關聯fTimer的timeout()訊號與槽函式on_timer_out()
void Widget::on_timer_timeout()
{
    QTime curtime=QTime::currentTime();//獲取當前時間
    ui->lcdNumber->display(curtime.hour());//顯示小時
    ui->lcdNumber_2->display(curtime.minute());//顯示分鐘
    ui->lcdNumber_3->display(curtime.second());//顯示秒鐘
    int pro=ui->progressBar->value();
    pro++;
    if(pro>100)
        pro=0;
    ui->progressBar->setValue(pro);//progressBar的變化
}
void Widget::on_pushButton_7_clicked()//設定週期按鈕
{
    int interval=ui->spinBox->value();
    fTimer->setInterval(interval);
    ui->pushButton_5->setEnabled(true);//開始按鈕有效
    ui->pushButton_6->setEnabled(false);//停止按鈕無效
    ui->pushButton_7->setEnabled(false);//設定週期按鈕無效
}


void Widget::on_pushButton_5_clicked()//開始按鈕
{
    fTimer->start();//定時器開工作
    fTimeCount.start();//計數器開始工作
    ui->pushButton_5->setEnabled(false);//開始按鈕無效
    ui->pushButton_6->setEnabled(true);//停止按鈕有效
    ui->pushButton_7->setEnabled(false);//設定週期按鈕無效
}


void Widget::on_pushButton_6_clicked()//停止按鈕
{
    fTimer->stop();
    int tmMsec=fTimeCount.elapsed();//計算時間差
    int ms=tmMsec%1000;//計算毫秒數
    int sec=tmMsec/1000;//計算秒數
    QString str=QString::asprintf("流逝時間:%d秒,%d毫秒",sec,ms);
    ui->label_6->setText(str);
    ui->pushButton_5->setEnabled(true);//開始按鈕有效
    ui->pushButton_6->setEnabled(false);//停止按鈕無效
    ui->pushButton_7->setEnabled(true);//設定週期按鈕有效
}

其中可以為設定週期的spinBox的value屬性中設定初始值,例如我為了貼合程式我將value設為1000ms,也就是1s

執行結果

在這裡插入圖片描述
在這裡插入圖片描述