QT第五天
阿新 • • 發佈:2018-12-16
時間日期與定時器
時間日期相關的類
(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
執行結果