實驗目标:實作計時器功能,并且點選打點按鈕将目前時間列印出來。
用到的類有 QTimer 和 QTime,QTimer 是一個計時器類,相當于秒表,QTimer 是一個時間類,相當于手表。
一:實驗步驟(迅為4412開發闆)
步驟一:界面布局:
拖拽元件,在屬性編輯欄設定大小,然後選中按鈕,點選水準布局;

在屬性編輯欄設定 Label 的最小高度為 50,選中全部元件,點選栅格布局,如圖:
根據實際情況調整大小,更改對象名後如下圖:
步驟二:建立計時器類對象 timer 和時間類 time,設定初始時間為 0。
class TimerP : public QMainWindow
{
Q_OBJECT
public:
explicit TimerP(QWidget *parent = 0); ~TimerP();
QTimer timer;
QTime time;
.......... };
複制代碼
步驟三:開啟計時器對象,設定定時時間,時間到後會發出 timeout() 信号,綁定此信号和自定義的槽函數 timeOut_Slot()。
void start(int msec);
函數功能:開啟定時器,時間到後發出 timeout 信号,并重新計時。
參數 msec 含義:定時時間,機關毫秒。
TimerP::TimerP(QWidget *parent) :
QMainWindow(parent), ui(new Ui::TimerP)
{
ui->setupUi(this);
//信号 timeout 與槽函數綁定
connect(&timer,SIGNAL(timeout()),this,SLOT(timeOut_Slot()));
time.setHMS(0,0,0,0);
ui->showTime->setText("00:00:00:000");
}
/**開始定時
*/
void TimerP::on_starBu_clicked()
{
timer.start(3);
}
複制代碼
步驟四:槽函數 timeOut_Slot()内處理時間類對象,使每次計時時間結束後,時間對象能增加相同的時間,實作計時功能。
QTime addMSecs(int ms) const;
參數 msec 含義:增加的時間值,機關毫秒。
函數功能:傳回一個目前時間對象之後 ms 毫秒之後的時間對象。
/*
* 計時
*/
void TimerP::timeOut_Slot()
{
//qDebug("timt out");
time = time.addMSecs(3);
ui->showTime->setText(time.toString("hh:mm:ss.zzz"));
}
複制代碼
步驟五:打點記錄功能,使用全局變量記錄排名,并顯示到界面。
/*
* 記錄
*/
void TimerP::on_bitBu_clicked()
{
QString temp;
i=i+1;
temp.sprintf("%d: ",i);
ui->bitTime->append(temp);
ui->bitTime->append(time.toString("hh:mm:ss.zzz"));
}
複制代碼
二:部分代碼
timerp.h:
class TimerP : public QMainWindow
{
Q_OBJECT
public:
explicit TimerP(QWidget *parent = 0); ~TimerP();
QTimer timer;
QTime time;
private slots:
void on_starBu_clicked();//開始計時按鈕槽函數
void timeOut_Slot();//定時時間到槽函數
void on_closeBu_clicked();//關閉按鈕槽函數
void on_resetBu_clicked();//重置按鈕槽函數
void on_bitBu_clicked();//打點記錄按鈕槽函數
private:
Ui::TimerP *ui;
};
timerp.cpp:
#include
#include
static int i;
TimerP::TimerP(QWidget *parent) :
QMainWindow(parent), ui(new Ui::TimerP)
{
ui->setupUi(this);
connect(&timer,SIGNAL(timeout()),this,SLOT(timeOut_Slot()));
time.setHMS(0,0,0,0);
ui->showTime->setText("00:00:00:000");
}
TimerP::~TimerP()
{
delete ui;
}
void TimerP::on_starBu_clicked()
{
timer.start(3);
}
/*
* 處理時間類對象
*/
void TimerP::timeOut_Slot()
{
//qDebug("timt out");
time = time.addMSecs(3);
ui->showTime->setText(time.toString("hh:mm:ss.zzz"));
}
/*
* 關閉
*/
void TimerP::on_closeBu_clicked()
{
timer.stop();
i=0;
}
/*
* 重置
*/
void TimerP::on_resetBu_clicked()
{
timer.stop();
time.setHMS(0,0,0,0);
ui->showTime->setText("00:00:00:000");
ui->bitTime->clear();
i=0;
}
/*
* 記錄
*/
void TimerP::on_bitBu_clicked()
{
QString temp;
i=i+1;
temp.sprintf("%d: ",i);
ui->bitTime->append(temp);
ui->bitTime->append(time.toString("hh:mm:ss.zzz"));
}
運作結果: