|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
实验目标:实现计时器功能,并且点击打点按钮将当前时间打印出来。3 d E: t3 p" N6 n) [; k
用到的类有 QTimer 和 QTime,QTimer 是一个计时器类,相当于秒表,QTimer 是一个时间类,相当于手表。! V; o) T" j2 L7 X! ]
一:实验步骤(迅为4412开发板)
R2 @+ E! `/ Y3 g0 j步骤一:界面布局:
8 K- d1 B6 L; T4 m, B拖拽组件,在属性编辑栏设置大小,然后选中按钮,点击水平布局;; a) L7 M! x$ x3 v, }- M8 D( Z: D
![]()
h+ _* d6 f6 q0 b在属性编辑栏设置 Label 的最小高度为 50,选中全部组件,点击栅格布局,如图:
' ` a) |4 [( k![]()
, A2 {9 a% U: a& O& @+ A根据实际情况调整大小,更改对象名后如下图:' G0 @: _) J! ~6 P! F5 K( R. _
![]()
( r8 B4 U1 R2 ^! Z- k+ a, U步骤二:创建计时器类对象 timer 和时间类 time,设置初始时间为 0。, ^( ]5 d4 Y# I$ X6 m
- class TimerP : public QMainWindow
- {
- Q_OBJECT
- public:
- explicit TimerP(QWidget *parent = 0); ~TimerP();
- QTimer timer;
- QTime time;
- .......... };
( g" C: Q: q( O& j6 R; | , X* w( l; o9 L( B
[color=rgb(51, 102, 153) !important]复制代码$ c& z9 [$ d1 h: r8 s' \6 n, e
6 P k- o/ a& B4 R6 D: V* v7 }
步骤三:开启计时器对象,设置定时时间,时间到后会发出 timeout() 信号,绑定此信号和自定义的槽函数 timeOut_Slot()。% O! [! |2 F% ` F' c
void start(int msec);+ h8 S8 d# I9 m8 }+ Z: c# {
函数功能:开启定时器,时间到后发出 timeout 信号,并重新计时。
t |/ @7 y2 G2 f5 x参数 msec 含义:定时时间,单位毫秒。
w6 @& R \7 g! x5 [- 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);
- }" b4 g0 ]. j- Q+ G
/ S9 C, o$ N& P0 t[color=rgb(51, 102, 153) !important]复制代码7 I6 x0 I. V! p$ R3 ^& A5 x; {" e
: V% i3 W1 p( D步骤四:槽函数 timeOut_Slot()内处理时间类对象,使每次计时时间结束后,时间对象能增加相同的时间,实现计时功能。1 s) [3 |: g: b0 [2 {% h: I. ~6 N
QTime addMSecs(int ms) const;
3 o z+ u+ n2 M; l参数 msec 含义:增加的时间值,单位毫秒。0 @; ~0 c9 J8 E$ ]
函数功能:返回一个当前时间对象之后 ms 毫秒之后的时间对象。8 U/ _- j! i0 O: Z
- /*
- * 计时
- */
- void TimerP::timeOut_Slot()
- {
- //qDebug("timt out");
- time = time.addMSecs(3);
- ui->showTime->setText(time.toString("hh:mm:ss.zzz"));
- }7 ]0 p& K5 U' e' i$ F9 G L2 |
) ]/ i. Q- y! Z[color=rgb(51, 102, 153) !important]复制代码' y0 C7 E" y9 J% |5 o
& p- u4 h* y9 l7 K3 a. {( o5 e# g/ m步骤五:打点记录功能,使用全局变量记录排名,并显示到界面。& R) F: x1 |6 Y; a! q% |$ q; L" p
- /*
- * 记录
- */
- 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"));
- }
& K9 n5 z' ~1 Z8 I1 i 0 q' E* ^: T. F# q' F, { \
[color=rgb(51, 102, 153) !important]复制代码6 ?* i; R; R' z6 O, F5 J
" k- c8 v/ j' J" G9 B% J二:部分代码
" B' Z6 N: N( O8 t- 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"));
- }
& D3 ~& F8 h% K; f7 r . n d+ ^; a5 F7 P2 f. l
[color=rgb(51, 102, 153) !important]复制代码
' @6 h. l8 {# o- \
# P3 \8 j, |5 J0 a$ J![]()
: u: A, d I2 y9 U; O$ @ |
|