应小伙伴的要求,作一个小计时器。功能是点击开始就从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都是使用拷贝的那一份了,就能够在其余电脑上运行了。