码迷,mamicode.com
首页 > 其他好文 > 详细

【QT】计时器制作

时间:2015-05-05 21:19:54      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

应小伙伴的要求,做一个小计时器。功能是点击开始就从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 = 0);
    ~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(0, 0, 0); //初始化时间

    ui->Timer->setDigitCount(8);
    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(1);
    ui->Timer->display(TimeRecord->toString("hh:mm:ss"));
}


void MainWindow::on_Start_clicked()
{
    if(!isStart) //尚未开始 开始计时
    {
        ui->Start->setIconSize(QSize(70,70));
        ui->Start->setIcon(*pauseIcon);
        ui->Start->show();
        timer->start(1000);

    }
    else //已经开始,暂停
    {
        ui->Start->setIcon(*startIcon);
        ui->Start->show();
        timer->stop();
    }
    isStart = !isStart;

}

void MainWindow::on_Stop_clicked()
{
    timer->stop();    //计时器停止
    TimeRecord->setHMS(0,0,0); //时间设为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像下图这样:

技术分享

【QT】计时器制作

标签:

原文地址:http://www.cnblogs.com/dplearning/p/4480017.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!