应小伙伴的要求,做一个小计时器。功能是点击开始就从00:00:00开始计时,点击暂停就暂停计时,点击停止就停止计时。

界面如上图,使用ui设计师直接拖的。按钮和图标的图片都是网上下载的。用美图秀秀抠成了透明的,看起来会好看一点。

整体代码挺容易的,就是设一个定时器。代码如下:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QMainWindow>
#include <QDateTime>
#include <QTimer>
#include <QTime>
#include <QPixmap>
#include <QIcon> namespace Ui {
class MainWindow;
} class MainWindow : public QMainWindow
{
Q_OBJECT public:
explicit MainWindow(QWidget *parent = );
~MainWindow(); private slots:
void updateTime();
void on_Start_clicked();
void on_Stop_clicked(); private:
Ui::MainWindow *ui;
QTimer * timer; //定时器 每秒更新时间
QTime * TimeRecord; //记录时间
bool isStart; //记录是否已经开始计时
QIcon * startIcon;
QIcon * pauseIcon;
QIcon * stopIcon;
}; #endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
setWindowIcon(QIcon(":/icon.png"));
setWindowTitle("TimerZ");
//setWindowFlags(Qt::FramelessWindowHint);
isStart = false; //初始为还未计时
timer = new QTimer; //初始化定时器
TimeRecord = new QTime(, , ); //初始化时间 ui->Timer->setDigitCount();
ui->Timer->setSegmentStyle(QLCDNumber::Flat);
ui->Timer->display(TimeRecord->toString("hh:mm:ss")); QPixmap pixStart(":/start.png");
startIcon = new QIcon(pixStart);
QPixmap pixPause(":/pause.png");
pauseIcon = new QIcon(pixPause);
QPixmap pixStop(":/stop.png");
stopIcon = new QIcon(pixStop); ui->Start->setIcon(*startIcon);
ui->Start->show();
ui->Stop->setIcon(*stopIcon);
ui->Stop->show(); connect(timer,SIGNAL(timeout()),this,SLOT(updateTime()));
} MainWindow::~MainWindow()
{
delete ui;
} void MainWindow::updateTime()
{
*TimeRecord = TimeRecord->addSecs();
ui->Timer->display(TimeRecord->toString("hh:mm:ss"));
} void MainWindow::on_Start_clicked()
{
if(!isStart) //尚未开始 开始计时
{
ui->Start->setIconSize(QSize(,));
ui->Start->setIcon(*pauseIcon);
ui->Start->show();
timer->start(); }
else //已经开始,暂停
{
ui->Start->setIcon(*startIcon);
ui->Start->show();
timer->stop();
}
isStart = !isStart; } void MainWindow::on_Stop_clicked()
{
timer->stop(); //计时器停止
TimeRecord->setHMS(,,); //时间设为0
ui->Timer->display(TimeRecord->toString("hh:mm:ss")); //显示00:00:00
isStart = false;
}

main.cpp 没改过

#include "mainwindow.h"
#include <QApplication> int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show(); return a.exec();
}

具体的难点是在发布的时候,点击生成的EXE总是运行不了。结果发现需要把所有用到的动态链接库都拷到exe的文件夹里。

下一个DLLShow可以显示程序运行所用到的所有的链接库,把用到的库拷到一起就好了。还下了一个ProcessExplorer也是同样的用途,看起来会更数目一点。

使用DLLShow的时候会像下图这样:

用ProcessExplorer像下图这样:

加注:

在我把所有用到的DLL拷到一个文件夹后,再次用DLLShow检测,发现所有plugin文件夹下的DLL还是使用的原位置的,而不是我拷贝的那一个。这样,应用在其他电脑上无法使用。

后来发现,要把plugin文件夹拷贝到当前文件夹下,保留里面的目录结构,当然,不用的DLL可以删掉。然后,在代码主函数中加入:

 QApplication::addLibraryPath("./plugins");

这样,再次运行时,所有的DLL都是使用拷贝的那一份了,就可以在其他电脑上运行了。

应用下载:http://pan.baidu.com/s/1o6j2rxw

【QT】计时器制作的更多相关文章

  1. QT程序制作deb包并安装在应用程序菜单

    制作原理:打包:将QT制作的源程序(没有编译的)用debian压缩打包(这里是用脚本对源程序再编译)安装:将deb包中的源程序解压(默认解压到根目录)到规定系统文件中并编译(postinst脚本)卸载 ...

  2. 基于Qt Assistant制作软件帮助文档

    Qt Assistant是Qt自带的一款可定制.可重新发行的帮助文件浏览器.Qt Assistant支持HTML文件,用户可以利用其定制自己的功能强大的帮助文档浏览器.关于Qt Assistant定制 ...

  3. 使用QT来制作串口终端

    为什么要使用QT,因为它是跨平台的. 我现在使用的环境是Win7 64bit,使用VS的编译器来编译QT工程. 安装这套环境简单说一下:先到QT官网下载qt-windows-opensource-5. ...

  4. Qt计时器

    在Qt中使用定时器有两种方法,一种是使用QObiect类的定时器:一种是使用QTimer类.定时器的精确性依赖于操作系统和硬件,大多数平台支持20ms的精确度. ■.QObject类的定时器QObje ...

  5. Qt socket制作一个简单的文件传输系统

    服务器 用qt designer设计出服务器界面: 上代码: Server.pro #------------------------------------------------- # # Pro ...

  6. qt 计时器自动刷新图片

    计时器 QTimer *timer; timer->start (); void PictureShow::stopStartPage() { if (timer->isActive()) ...

  7. Qt Creater 制作汽车仪表盘

    最近项目用到了模拟仪表,网上下载大神编写的按个仪表Meter没有成功 转战 QWt 编译后,在creater中仍然无法使用,只可以在代码中使用 百度说是我编译的版本不对 扔到 开始做自己的 这个用到了 ...

  8. pyqt QT设计师制作关于对话框(软件版权申明)

    一.实验环境 1.anaconda2 2.5.0 + python2.7 2.pyinstaller3.0 二.操作步骤 2.1 启动designer.exe 2.2 单击“文件” -> “新建 ...

  9. 6.关于QT中的内存管理,动态的制作,动态库的调用,静态库的制作

     一  QT的内存管理 1  QT中的内存管理是QObject来管理的 2  QT中的内存管理没有cocos2dx中的引用计数 3  组件能够指定父对象 QTimer *timer = QTime ...

随机推荐

  1. C++ Strings(字符串)

    Constructors 构造函数,用于字符串初始化 Operators 操作符,用于字符串比较和赋值 append() 在字符串的末尾添加文本 assign() 为字符串赋新值 at() 按给定索引 ...

  2. [译] 开发者角度,王道之论:Android 与 Windows Phone

    前几天,在codeproject搜索Silverlight资料,偶然看到这篇文章,耐心读了2遍,非常不错:文章通过访谈聊天形式叙述,2位主角目前在<斯法克斯国家工程学院>软件学院上学. 周 ...

  3. DIV_ROUND_UP(x,y)实现x/y向上取整

    #define DIV_ROUND_UP(x,y) (((x) + ((y) - 1)) / (y)) 1.问题 x.y都是整数,且x > 1, y > 1,求 x / y的向上取整,即: ...

  4. Hibernate中的对象状态,及自动更新原因

    Hibernate的对象有三种状态,分别为:瞬时状态 (Transient). 持久化状态(Persistent).游离状态(Detached).对它的深入理解,才能更好的理解hibernate的运行 ...

  5. CentOS 5.8 升级php版本

    一:我们都知道系统的yum源安装出来的php版本不是5.1的就是5.3  那就是说 有些程序不支持那么低的版本的呢 那我们该怎么办呢 接下来 简单的说下php的版本升级  编译升级太慢了 这里我们选择 ...

  6. UINavigationController 与 UITabBarController

    http://www.cnblogs.com/YouXianMing/p/3756904.html // index start from 1. UITabBarItem *newsItem = [[ ...

  7. 第一个C#应用 【搜索软件】

    搜索软件V1.0 [附软件截图][http://pan.baidu.com/s/1mihEbe4] 设备搜索:支持广播搜索[local search],指定ip[range search]搜索,直接w ...

  8. 学C++之感悟

    程序设计真的就这么难得入门啊 最要命的事情就是看那些看不懂的书.断断续续地看C++Primer好几天了,还是一点眉目都没有,稀里糊涂的.看得头疼了用Google找过来人留下的东西看,无意中发现了一篇自 ...

  9. php正则表达式判断是否为ip格式

    <?php $a = '127.0.0.111'; $b = preg_match("/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/",$a); ...

  10. windows下设置socket的connect超时

    SOCKET Open(const char* strIP, UINT nPort, int nTimeOut)    {        SOCKET sockfd = NULL;           ...