【QT】計時器製做

應小夥伴的要求,作一個小計時器。功能是點擊開始就從00:00:00開始計時,點擊暫停就暫停計時,點擊中止就中止計時。git

 

界面如上圖,使用ui設計師直接拖的。按鈕和圖標的圖片都是網上下載的。用美圖秀秀摳成了透明的,看起來會好看一點。less

 

總體代碼挺容易的,就是設一個定時器。代碼以下:函數

mainwindow.hui

#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.cppthis

#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 沒改過spa

#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也是一樣的用途,看起來會更數目一點。3d

使用DLLShow的時候會像下圖這樣:code

 

用ProcessExplorer像下圖這樣:blog

 

加註:

在我把全部用到的DLL拷到一個文件夾後,再次用DLLShow檢測,發現全部plugin文件夾下的DLL仍是使用的原位置的,而不是我拷貝的那一個。這樣,應用在其餘電腦上沒法使用。

後來發現,要把plugin文件夾拷貝到當前文件夾下,保留裏面的目錄結構,固然,不用的DLL能夠刪掉。而後,在代碼主函數中加入:

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

這樣,再次運行時,全部的DLL都是使用拷貝的那一份了,就能夠在其餘電腦上運行了。

 

 

應用下載:http://pan.baidu.com/s/1o6j2rxw

相關文章
相關標籤/搜索