QT5实现钟表运行,并进行打包部署
1、QT5实现钟表运行
1.1 文件结构
这是一个简单的时钟运行界面,项目的结构如图所示,主要包含一个头文件:** analogclock.h **,两个源文件: ** analogclock.cpp main.cpp **. 看完本教程,你就可以知悉在Windows系统上如何实现一个界面程序并部署在Windows系统上。
1.2 各个文件的代码
代码参考了https://blog.csdn.net/Jamence/article/details/76014276点击跳转,感谢该博主。
** clock.pro **
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
CONFIG += c++11
# You can make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
SOURCES += \
main.cpp \
analogclock.cpp
HEADERS += \
analogclock.h
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
** analogclock.h **
#ifndef ANALOGCLOCK_H
#define ANALOGCLOCK_H
#include <QWidget>
class AnalogClock : public QWidget
{
Q_OBJECT
public:
AnalogClock(QWidget *parent=0);
protected:
void paintEvent(QPaintEvent *event) override;
};
#endif
** analogclock.cpp **
#include <QtWidgets>
#include "analogclock.h"
AnalogClock::AnalogClock(QWidget *parent)
: QWidget(parent)
{
QTimer *timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
timer->start(1000);
setWindowTitle(tr("Analog Clock"));
resize(200, 200);
}
void AnalogClock::paintEvent(QPaintEvent *)
{
static const QPoint hourHand[3] = {
QPoint(7, 8),
QPoint(-7, 8),
QPoint(0, -40)
};
static const QPoint minuteHand[3] = {
QPoint(7, 8),
QPoint(-7, 8),
QPoint(0, -60)
};
static const QPoint secondHand[3]={
QPoint(7,8),
QPoint(-7,8),
QPoint(0,-90)
};
QColor hourColor(127, 0, 127);
QColor minuteColor(0, 127, 127, 191);
QColor secondColor(220,20,60,100);
int side = qMin(width(), height());
QTime time = QTime::currentTime();
qDebug()<<time<<'\n';
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.translate(width() / 2, height() / 2);
painter.scale(side / 200.0, side / 200.0);
painter.setPen(Qt::NoPen);
painter.setBrush(hourColor);
painter.save();
painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
painter.drawConvexPolygon(hourHand, 3);
painter.restore();
painter.setPen(hourColor);
for (int i = 0; i < 12; ++i) {
painter.drawLine(88, 0, 96, 0);
painter.rotate(30.0);
}
painter.setPen(Qt::NoPen);
painter.setBrush(minuteColor);
painter.save();
painter.rotate(6.0 * (time.minute() + time.second() / 60.0));
painter.drawConvexPolygon(minuteHand, 3);
painter.restore();
painter.setPen(minuteColor);
for (int j = 0; j < 60; ++j) {
if ((j % 5) != 0)
painter.drawLine(92, 0, 96, 0);
painter.rotate(6.0);
}
painter.setPen(Qt::NoPen);
painter.setBrush(secondColor);
painter.save();
painter.rotate(6*time.second());
painter.drawConvexPolygon(secondHand,3);
painter.restore();
}
** main.cpp **
#include "analogclock.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
AnalogClock w;
w.show();
return a.exec();
}
2、编译,打包
2.1 编译
一般编译过程采用的是debug版本,但是给其他用户使用最好是release版本,因此打包前需要切换到release版本重新编译一遍。 这样在项目文件夹中会有两种版本的exe执行程序。
2.2 打包
参考博客:https://www.cnblogs.com/huya-edu/p/14042510.html
生成release版本的exe后,进入文件夹中,** 将release文件夹中的clock.exe复制到单独的文件夹中 ,我复制到myClock文件夹中。 在开始菜单中,选择下图红色的cmd。 进入到myClock文件夹中,输入 windeployqt clock.exe ** 打包完成后,在myClock文件夹中就可以看到各种.dll链接库文件,这是exe文件依赖的库文件,此时双击clock.exe就可以动态显示时钟了。 将该文件夹打包,就可以部署到其他的Windows系统上。
|