|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
实验目标:实现计时器功能,并且点击打点按钮将当前时间打印出来。6 n& z! f3 e" `
用到的类有 QTimer 和 QTime,QTimer 是一个计时器类,相当于秒表,QTimer 是一个时间类,相当于手表。5 X8 M/ R$ v: K' M8 o. A7 E X
一:实验步骤(迅为4412开发板)
) v# W; h# ?" G" Y步骤一:界面布局: h1 v/ S1 t* ?
拖拽组件,在属性编辑栏设置大小,然后选中按钮,点击水平布局;/ s( K8 f. y: Q* M2 N& _. J9 y
" u5 F; p; F7 e
在属性编辑栏设置 Label 的最小高度为 50,选中全部组件,点击栅格布局,如图:
J; ^ B2 G. G# {2 V6 ? 5 h0 l) ?; j' r" B7 O
根据实际情况调整大小,更改对象名后如下图:
& J/ t. s" S8 L) O, H5 T# w W; b% V 7 v6 A- x) N2 ]% ~" x' X7 D O
步骤二:创建计时器类对象 timer 和时间类 time,设置初始时间为 0。; w2 i2 M! d7 e% e
- class TimerP : public QMainWindow
- {
- Q_OBJECT
- public:
- explicit TimerP(QWidget *parent = 0); ~TimerP();
- QTimer timer;
- QTime time;
- .......... };
7 w/ X( @* H" z8 r/ H/ L4 U6 p. `
* e/ _, V3 e' M+ a3 I[color=rgb(51, 102, 153) !important]复制代码 u' W$ x4 U$ i) F; j6 T% ]* K
7 G1 U3 X" p4 }) ~步骤三:开启计时器对象,设置定时时间,时间到后会发出 timeout() 信号,绑定此信号和自定义的槽函数 timeOut_Slot()。
& X$ m9 d! D1 N( M7 x* Avoid start(int msec);) I4 r( t3 q: }0 H
函数功能:开启定时器,时间到后发出 timeout 信号,并重新计时。, q) x. y0 P7 B" I7 _
参数 msec 含义:定时时间,单位毫秒。
9 D8 j7 e- i/ v# M9 t/ V- 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:
n_starBu_clicked() - {
- timer.start(3);
- }5 ]. B$ X* ?) Z' S* \
9 ^! k5 s( D8 J* m8 \; C7 M. z
[color=rgb(51, 102, 153) !important]复制代码
$ e) Y* ~, m/ n" q4 Q: e0 V! k% v7 `- `* _; W
步骤四:槽函数 timeOut_Slot()内处理时间类对象,使每次计时时间结束后,时间对象能增加相同的时间,实现计时功能。7 Y: W% X0 ^2 B( _3 a
QTime addMSecs(int ms) const;
2 c3 y8 |& m; i( N2 G参数 msec 含义:增加的时间值,单位毫秒。
f* ~3 ]- X' y- y# u函数功能:返回一个当前时间对象之后 ms 毫秒之后的时间对象。- z t* {1 O& I- r& \: p
- /*
- * 计时
- */
- void TimerP::timeOut_Slot()
- {
- //qDebug("timt out");
- time = time.addMSecs(3);
- ui->showTime->setText(time.toString("hh:mm:ss.zzz"));
- }/ P6 c W% | P* u6 w3 T
( S5 x7 c% w- w( ~8 d! L. _[color=rgb(51, 102, 153) !important]复制代码; Q0 I1 n0 D t8 m
; b1 I" I/ D: x _- q5 b' i步骤五:打点记录功能,使用全局变量记录排名,并显示到界面。' y3 r7 h7 q" W7 m3 {+ t& K
- /*
- * 记录
- */
- void TimerP:
n_bitBu_clicked() - {
- QString temp;
- i=i+1;
- temp.sprintf("%d: ",i);
- ui->bitTime->append(temp);
- ui->bitTime->append(time.toString("hh:mm:ss.zzz"));
- }& j- b0 v: n4 `- D: }
5 c/ G( K+ ^. C. Z, ^3 k; {[color=rgb(51, 102, 153) !important]复制代码
' X9 U/ W) p* A% G5 `$ X
0 i7 k: m( c& K b9 a C, \二:部分代码
4 c$ H- Y1 B# o- 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:
n_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"));
- }
7 ~' w! X$ `* J: V5 o
- w& W/ S* y) |0 z) Z1 I[color=rgb(51, 102, 153) !important]复制代码& P' x) H1 L* \8 f4 R6 i
4 Q; ]' \' E4 @# N8 t8 p
8 z" O% I# [" t5 T4 T
|
|