【QT】計時器制作


應小伙伴的要求,做一個小計時器。功能是點擊開始就從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像下圖這樣:

 

加注:

在我把所有用到的DLL拷到一個文件夾后,再次用DLLShow檢測,發現所有plugin文件夾下的DLL還是使用的原位置的,而不是我拷貝的那一個。這樣,應用在其他電腦上無法使用。

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

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

這樣,再次運行時,所有的DLL都是使用拷貝的那一份了,就可以在其他電腦上運行了。

 

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM