秒表对于我来说并不陌生,在之前自己学习单片机时,实现过秒表和数字钟;基本思路:开启单片机带的定时器,并设置它没10ms溢出一次,分别用三个变量hour,minute,secong记录秒表的时分秒,然后每0.5s刷新一次显示函数,这样最基本的秒表的基本功能就实现了;当然,在Qt里面设计一个秒表也可以用相似的方法就行实现。

由于嵌入式实验要用Qt做个俄罗斯方块游戏,想在游戏中加个模块(游戏的时间);因此才有了设计秒表的想法。在此,想把秒表封装成类模块,提供三个接口:启动秒表,暂停秒表,复位秒表。

1.秒表的界面设计

用QtCreator新建一个QtGUI应用程序,工程名为myStopWatch,类名为MyStopWatch,基类为QWidget。双击mystopwatch.ui文件,进入界面设计的画面,添加三个lineEdit控件,调整大小,并分别命名为lineEditH,lineEditM,textEditS,在font选项下,可以改变字体的大小,完成后的结果如下图:

2.秒表的类实现

新建好的工程里面有四个文件:mystopwatch.h,mystopwatch.cpp,main.cpp,mystopwatch.ui

(1)mystopwatch.h

在public下面添加三个接口函数:

void StartStopwatch();

void ResetStopwatch();

void StopStopwatch();

在private下添加如下代码:

int hourTemp;           //Hour
    int minuteTemp;         //Minute
    int secondTemp;         //Second
    int countTemp;
    QTimer *msTimer;
    void Display(QString,QString,QString);
    void SetStrLength(QString *str, int length);

并设计一个时间槽timeSlot(),每当定时器溢出时,就会执行槽中的代码;

完成后mystopwatch.h文件中的内容如下:

#ifndef MYSTOPWATCH_H
#define MYSTOPWATCH_H#include <QWidget>
#include<QTimer>
namespace Ui {class MyStopWatch;
}class MyStopWatch : public QWidget
{Q_OBJECTpublic:explicit MyStopWatch(QWidget *parent = 0);~MyStopWatch();void StartStopwatch();  //启动秒表void ResetStopwatch();  //复位秒表void StopStopwatch();   //暂停秒表private:Ui::MyStopWatch *ui;int hourTemp;           //Hourint minuteTemp;         //Minuteint secondTemp;         //Secondint countTemp;QTimer *msTimer;   //定义一个定时器void Display(QString,QString,QString);void SetStrLength(QString *str, int length);
private slots:void TimeSlot();
};#endif // MYSTOPWATCH_H

(2)mystopwatch.cpp

在类MyStopWatch的构造函数中,对秒表的显示进行初始化,创建一个定时器并把相应的信号与槽进行连接;即在构造函数中添加如下代码:

MyStopWatch::MyStopWatch(QWidget *parent) :QWidget(parent),ui(new Ui::MyStopWatch)
{ui->setupUi(this);countTemp=0;secondTemp=0;minuteTemp=0;hourTemp=0;msTimer= new QTimer(this);  //this说明是当前类对象的定时器//把信号与槽进行连接connect(msTimer,SIGNAL(timeout()),this,SLOT(TimeSlot()));
}

槽TimeSlot()的实现:

void MyStopWatch::TimeSlot()
{countTemp+=1;if(countTemp==100){countTemp=0;secondTemp+=1;if(secondTemp==60){secondTemp=0;minuteTemp+=1;if(minuteTemp==60){minuteTemp=0;hourTemp+=1;if(hourTemp==24){hourTemp=0;}}}}//把整数转换成字符串QString hourstr = QString::number(hourTemp);QString minutestr = QString::number(minuteTemp);QString secondstr = QString::number(secondTemp);Display(hourstr,minutestr,secondstr);
}void MyStopWatch::Display(QString hour, QString minute, QString second)
{ui->lineEditH->setText(hour);ui->lineEditM->setText(minute);ui->lineEditS->setText(second);
}

启动秒表的代码实现:

void MyStopWatch::StartStopwatch()
{msTimer->start(10); //10ms
}

此时在main添加一行代码,调用StartStopwatch()来开启秒表,代码如下:

#include <QtGui/QApplication>
#include "mystopwatch.h"int main(int argc, char *argv[])
{QApplication a(argc, argv);MyStopWatch w;w.StartStopwatch();w.show();return a.exec();
}

此时,运行程序,我们的秒表就可以跑起来了;其效果图如下,

由图可知我们的秒表的界面有点难看,下面我们对界面进行优化,字体颜色和背景颜色,保证时,分,秒的数字是一位时,对十位进行补零,把十位也显示出来。

3.秒表的界面优化

(1)linetext控件的背景颜色和控件中的字体颜色

在QWidget类对象的属性中,有个palette,点击改变调色板,界面如下:

其中Text可以改变字体的颜色,这里设置为红色;Base是改变控件背景颜色,设置为蓝色。

QPalete::Window,通常指窗口部件的背景色;

QPalette:WindowText,通常指窗口部件的前景色;

QPalette::Base,指文本输入窗口部件(比如QtextEdit,QLinedit等)的背景色.

QPalette::Text,与QPalette::Base一块使用,指文本输入窗口部件的前景色;

QPalette::Button,指按钮窗口部件的背景色;

QPalette::ButtonText,指按钮窗口部件的前景色.

(2)SetStrLength()函数的实现

void MyStopWatch::SetStrLength(QString *str, int length)
{if(str->length()<length){str->insert(0,"0");}
}

在槽TimeSlot()中,在调用Display()函数前,添加如下代码:

 //把整数转换成字符串QString hourstr = QString::number(hourTemp);QString minutestr = QString::number(minuteTemp);QString secondstr = QString::number(secondTemp);//设置字符串的长度为2SetStrLength(&hourstr,2);SetStrLength(&minutestr,2);SetStrLength(&secondstr,2);Display(hourstr,minutestr,secondstr);

再次,运行程序,结果如下:

其他接口函数的实现:

void MyStopWatch::ResetStopwatch()
{ui->lineEditH->setText("00");ui->lineEditM->setText("00");ui->lineEditS->setText("00");countTemp=0;secondTemp=0;minuteTemp=0;hourTemp=0;}void MyStopWatch::StopStopwatch()
{msTimer->stop();
}

Qt学习之秒表的实现(StopWatch)相关推荐

  1. Qt学习笔记,Qt国际化

    Qt学习笔记,Qt国际化 Qt国际化步骤: 第一步:设置.pro文件,加入TRANSLATIONS为国际化做准备 TRANSLATIONS = language/language_en.ts\     ...

  2. Qt学习笔记,Qt程序架构设计要旨

    Qt学习笔记,Qt程序架构设计要旨 时间过得很快,转眼学习Qt已经有一个多月了,对Qt的学习也在不断的深入中.自己手下的code也很多了,不过不得不说,还有很多的部分没有接触过,比如网络编程,2D,3 ...

  3. 转载: Qt 学习之路 2归档

    Qt 学习之路 2归档 http://www.devbean.net/2012/08/qt-study-road-2-catelog/

  4. 对QT学习之路12-14的源代码补充与修正

    QT学习之路12-14的源代码有些不完整,为了更好的让大家学习,本人做了一点修正与补充,谢谢.源代码如下: 头文件: #ifndef MAINWINDOW_H #define MAINWINDOW_H ...

  5. Qt学习笔记之MySQL数据库

    一.MySQL概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQ ...

  6. Qt学习笔记之数据库

    一.数据库简介 1.1.数据和数据库(DB) 用计算机进行数据处理,首先就要把信息以数据形式存储到计算机中,故数据是可以被计算机接受和处理的符号.根据所表示的信息特征不同,数据有不同的类别,如数字.文 ...

  7. Qt学习笔记之文件处理

    Qt提供了通用的文件处理类QFile和处理文本的QTextStream类和处理二进制数据的QDataStream类,这些流操作极大地方便了对文件的督促存储.对文件信息和目录进行操作的类是QfileIn ...

  8. Qt学习笔记之国际化

    国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),一个应用程序的国际化就是使该应用程序可以让其他国家的用户使用的过程. 1. 相关的Qt类和AP ...

  9. Qt学习笔记之 字符串类型小结

    1. Qt常用字符串类型 1.1 QString QString是Unicode编码的字符串,存储一系列16位的QChar,每一个QChar对应一个Unicode 4.0编码的字符,详见<Qt学 ...

  10. 【Qt】Qt学习资料汇总

    00. 目录 文章目录 00. 目录 01. Qt官网 02. 编码风格 03. GitHub & Third-Party 04. 社区论坛 05. 参考博客 06. 书籍 附录 01. Qt ...

最新文章

  1. VS2010解决方案转换到VS2008
  2. 10天学安卓-第六天
  3. 不厌其烦,又一个Vue组件库
  4. html表格通过邮件发送,通过html表格发电子邮件
  5. sql语句优化总结 mysql_MySQL-SQL优化总结
  6. 协同办公OA系统 沉淀企业文化
  7. 基于SpringCloud Alibaba实现的论坛
  8. Hdu 5806 NanoApe Loves Sequence Ⅱ(双指针) (C++,Java)
  9. 微信unionID和openID区别
  10. python 区块链开发教程_Python区块链教程(一)
  11. springboot Vue java学生宿舍报修管理系统源码介绍
  12. 阿里云 大数据DataWorks开发套件的相关操作
  13. java输入十个,键盘输入十个数,输出最大数
  14. numeric转换varchar_数据库中varchar类型数据转换为numeric类型
  15. 盘点那些免费视频网址到底有多爽
  16. Go语言环境配置 Sublime Text + GoSublime+ gocode + MarGo组
  17. 企业管理之道:中层管理者,到底该管理什么?
  18. Spring之配置非自定义Bean
  19. 第二次作业------仿制网站
  20. 晨风机器人插件编辑器_晨风机器人文本编辑器使用方法

热门文章

  1. 图计算之开局女朋友跑了
  2. leetcode---生命游戏
  3. ffmpeg新旧对照一览表
  4. php获取客户端文件夹,php获取客户端cpu信息
  5. Multisim软件的逻辑电路简单测试
  6. Python就业后能拿高薪吗
  7. python变量的默认值是什么_Python函数参数默认值的陷阱和原理深究
  8. java项目中引用自己打的jar包
  9. 高仿中国银行ATM系统
  10. [scrum] 2011/9/21-----第一天