應小夥伴的要求,作一個小計時器。功能是點擊開始就從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都是使用拷貝的那一份了,就能夠在其餘電腦上運行了。