.h
- #ifndef WIDGET_H
- #define WIDGET_H
-
- #include
- #include
- #include
//信息调试类 - #include
- #include
//图像引擎类 - #include
- #include
//定时器类 - #include
//日期类 - #include
- QT_BEGIN_NAMESPACE
- namespace Ui { class Widget; }
- QT_END_NAMESPACE
-
- class Widget : public QWidget
- {
- Q_OBJECT
-
- public:
- Widget(QWidget *parent = nullptr);
- ~Widget();
-
- void paintEvent(QPaintEvent *event);
- void timerEvent(QTimerEvent *e);
- private slots:
-
- private:
- Ui::Widget *ui;
-
- int timer_id;
- //给定时器实例化一个对象
- QTimer * timer;
- int hh=0,mm=0,ss=0;
- };
- #endif // WIDGET_H
.cpp
- #include "widget.h"
- #include "ui_widget.h"
-
- Widget::Widget(QWidget *parent)
- : QWidget(parent)
- , ui(new Ui::Widget)
- {
- ui->setupUi(this);
-
- timer_id=this->startTimer(1000);
- //给定时器实例化对象
- timer=new QTimer(this);
-
- // 设置窗口的大小和标题
- setFixedSize(500, 500);
- setWindowTitle("闹钟");
-
- }
-
- Widget::~Widget()
- {
- delete ui;
- }
-
- //绘制事件处理函数
- void Widget::paintEvent(QPaintEvent *event)
- {
-
- //实例化一个画家
- QPainter painter(this);
- // 设置反锯齿渲染
- painter.setRenderHint(QPainter::Antialiasing, true);
- //实例化一个画笔
- QPen pen;
- pen.setColor(QColor("blue"));
- //设置线型
- pen.setStyle(Qt::DashDotLine);
- //将画笔给画家安排上
- painter.setPen(pen);
- //设置基准坐标系
- painter.translate(this->width()/2,this->height()/2);
- //画个钟盘
- painter.setBrush(QBrush(QColor("skyblue")));
- painter.drawEllipse(QPoint(0,0),200,200);
-
- //绘制矢量文字
- pen.setColor(QColor("black"));
- painter.setPen(pen);
-
- //给画家设置字体
- painter.setFont(QFont("隶书",15,13));
-
- //画小时格子
- for(int i=1;i<=12;i++)
- {
- //每转30度画一个时刻
- painter.rotate(30);
- pen.setWidth(4);
- painter.setPen(pen);
-
- painter.drawLine(0,-200,0,-175);
- painter.drawText(0,-170,QString("%1").arg(i));
- }
- //画分格子
- for(int i=0;i<=59;i++)
- {
- painter.rotate(6);
- pen.setWidth(2);
- painter.setPen(pen);
-
- painter.drawLine(0,-200,0,-190);
-
- }
-
- //绘制矢量文字
- painter.translate(-this->width()/2,-this->height()/2);
- painter.drawText(this->rect(),Qt::AlignCenter,"啊啊,我饿了");
-
- //绘制指针
-
- pen.setWidth(5);
-
- painter.translate(this->width()/2,this->height()/2);
- pen.setStyle(Qt::SolidLine); //设置线型
-
- //1、绘制秒针
- painter.save();
- painter.setPen(Qt::green);
- painter.setBrush(Qt::green);
- painter.rotate(ss*6-90);
- painter.drawLine(0,0,160,0);
- painter.restore();
-
- //2、绘制分针
- painter.save();
- painter.setPen(pen);
- painter.setPen(Qt::red);
- painter.rotate(6*(mm+ss/60.0)-90);
- painter.drawLine(0,0,140,0);
- painter.restore();
-
- //3、绘制时针
- painter.save();
- //painter.translate(this->width()/2,this->height()/2);
- pen.setWidth(4);
- painter.setPen(pen);
- painter.setPen(Qt::black);
- painter.setBrush(Qt::black);
- painter.rotate(30*(hh+mm/60.0+ss/3600.0)-90);
- painter.drawLine(0,0,90,0);
- painter.restore();
- }
-
- //定时器事件处理函数
- void Widget::timerEvent(QTimerEvent *e)
- {
- if(e->timerId() == timer_id) //说明定时器1到位
- {
- QDateTime current = QDateTime::currentDateTime(); // 获取当前系统时间
- QTime sys_t = current.time(); // 获取系统时间的时、分、秒
- hh = sys_t.hour();
- mm = sys_t.minute();
- ss = sys_t.second();
- update();
- qDebug()<<"hh:mm:ss"<
-
- }
- }
-
-
- #include "widget.h"
-
- #include
-
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- Widget w;
- w.show();
- return a.exec();
- }
