QT4thclock


一个普普通通的小时钟

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
int picID=1;

private:

protected:
void paintEvent(QPaintEvent *event) override;
};
#endif // MAINWINDOW_H

#include "mainwindow.h"
#include<QTimer>
#include<QPainter>
#include<QTime>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)

{
QTimer *timer=new QTimer(this);
connect(timer, &QTimer::timeout, this, QOverload<>::of(&MainWindow::update));
timer->start(1000);
setWindowTitle("Clock");
resize(200,200);
}

MainWindow::~MainWindow()
{

}

void MainWindow::paintEvent(QPaintEvent *event)
{
static const QPoint hourHand[4] = {
QPoint(5, 14),
QPoint(-5, 14),
QPoint(-4, -61),
QPoint(4, -61)//构成时针梯形的四个点
};//时针
static const QPoint minuteHand[4] = {
QPoint(4, 14),
QPoint(-4, 14),
QPoint(-3, -79),
QPoint(3, -79)
};

static const QPoint secondHand[4] = {
QPoint(1, 14),
QPoint(-1, 14),
QPoint(-1, -89),
QPoint(1, -89)
};
const QColor hourColor(Qt::black);
const QColor minuteColor(Qt::blue);
const QColor secondColor(Qt::red);

int side = qMin(width(), height());
QPainter painter(this);
QTime time=QTime::currentTime();//获取时间
QDate date = QDate::currentDate();//获取日期

painter.setRenderHint(QPainter::Antialiasing);//平滑
painter.translate(width()/2,height()/2);//将原点移动到页面的中心
painter.scale(side/200,side/200);//设置长宽比例因子
painter.setBrush(hourColor);//设置画笔颜色
painter.setPen(Qt::NoPen);

painter.save();//保存
painter.setPen(Qt::blue);
painter.setFont(QFont("Arial", 10));
painter.drawText(QRect(-side/2,side/2-290,side,290),Qt::AlignCenter,tr("Njupt"));
painter.restore();
painter.save();
painter.setPen(Qt::black);//设置画笔颜色
painter.setFont(QFont("Arial", 10));//设定字体
painter.drawText(QRect(-side/2, side/2 - 100, side, 100), Qt::AlignCenter, date.toString("yyyy-MM-dd"));//将日期转化成字符串
painter.restore();//存储

painter.save();
painter.rotate(30*(time.hour()+time.minute()/60));
painter.drawConvexPolygon(hourHand, 4);
for (int i = 0; i < 60; i++) {
if (i % 5 == 0) {
painter.drawRect(85, -2, 10, 4);//(x,y,width,height)时针
} else {
painter.drawRect(90, -1, 5, 2);//(x,y,width,height)分针
}
painter.rotate(6);//每调用一次,转六度
}
painter.restore();

painter.save();
painter.setBrush(minuteColor);

painter.rotate(6*(time.minute()+time.second()/60));
painter.drawConvexPolygon(minuteHand, 4);
painter.restore();

painter.save();
painter.setBrush(secondColor);
painter.rotate(6*time.second());
painter.drawConvexPolygon(secondHand, 4);//
painter.drawEllipse(-5, -68, 10, 10);//(x,y,r,r)画小圆圈
painter.drawEllipse(-5, -6, 10, 10);
painter.restore();

}

#include "mainwindow.h"

#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}


Author: T1g3r
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint policy. If reproduced, please indicate source T1g3r !
评论
  TOC