php网站建设 关键技术,wordpress 安装语言设置中文乱码,自建vps和买机场哪个好,网站后台费用这个时钟实现的底层原理主要是利用 Qt 的绘图机制和定时器。首先#xff0c;设置固定大小的窗口#xff0c;创建定时器并连接到槽函数#xff0c;定时器每秒钟触发一次#xff0c;触发窗口重绘。在paintEvent函数中#xff0c;使用QPainter进行绘图#xff0c;绘制圆形表… 这个时钟实现的底层原理主要是利用 Qt 的绘图机制和定时器。首先设置固定大小的窗口创建定时器并连接到槽函数定时器每秒钟触发一次触发窗口重绘。在paintEvent函数中使用QPainter进行绘图绘制圆形表盘和时间点标记。通过获取当前时间计算时针、分针和秒针的旋转角度使用rotate函数旋转坐标系然后绘制相应长度的直线代表指针。每次定时器触发时调用update函数引发重绘实现时钟的动态显示。
widght.h
#ifndef WIDGET_H
#define WIDGET_H#include QWidget
#include QDebug
#include QLabel
#include QPen
#include QPainter
#include QPaintEvent
#include QTime
#include QTimerQT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();private:Ui::Widget *ui;//定时器QTimer *timer;//绘制事件void paintEvent(QPaintEvent *event) override;private slots:;void update_slot();
};
#endif // WIDGET_Hwidget.cpp
#include widget.h
#include ui_widget.h#include QTime
#include QPainterWidget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui-setupUi(this);// 设置窗口大小this-setFixedSize(600, 600);// 创建定时器timer new QTimer(this);// 连接定时器时信号与槽函数connect(timer, QTimer::timeout, this, Widget::update_slot);timer-start(1000);QLabel *name new QLabel(this);name-setText(江诗丹顿);name-move(this-width()/2-30,this-height()/2100);name-setStyleSheet(color: red; font-size: 16px;);}Widget::~Widget()
{delete ui;
}void Widget::paintEvent(QPaintEvent *event)
{Q_UNUSED(event);// 获取当前时间QTime time QTime::currentTime();// 准备画笔QPen pen;pen.setColor(green);pen.setWidth(2);// 实例化一个画家QPainter painter(this);painter.setPen(pen);painter.drawEllipse(this-width()/2 - 200, this-height()/2 - 200, 400, 400);// 设置坐标系起点为窗口中心painter.translate(this-width()/2, this-height()/2);// 绘制时间点标记pen.setColor(gray);pen.setWidth(2);painter.setPen(pen);for (int i 0; i 12; i) {painter.save();painter.rotate(30 * i);painter.drawLine(180, 0, 190, 0);painter.restore();}// 绘制时针painter.rotate(30.0 * ((time.hour() % 12) time.minute() / 60.0 time.second() / 3600.0));pen.setWidth(8);pen.setColor(blue);painter.setPen(pen);painter.drawLine(0, 0, 50, 0);// 绘制分针painter.rotate(6.0 * (time.minute() time.second() / 60.0));pen.setWidth(4);pen.setColor(orange);painter.setPen(pen);painter.drawLine(0, 0, 70, 0);// 绘制秒针painter.rotate(6.0 * time.second());pen.setWidth(2);pen.setColor(red);painter.setPen(pen);painter.drawLine(0, 0, 90, 0);}void Widget::update_slot()
{update();
}