#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPainter> //画家类
#include <QTimer> //定时器类
#include <QTime> //时间类
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
public slots:
void timeout_slot();
private:
Ui::Widget *ui;
//定义一个定时器变量
QTimer t1;
void paintEvent(QPaintEvent *event) override;
int h=0,m=0,s=0;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
this->resize(500,500);
t1.start(1000);
//由于定时器事件的信号与槽绑定
connect(&t1,&QTimer::timeout,this,&Widget::timeout_slot);
}
Widget::~Widget()
{
delete ui;
}
//绘制事件处理函数
void Widget::paintEvent(QPaintEvent *event)
{
//实例化一个画家
QPainter painter(this);
//准备画笔
QPen pen;
pen.setColor(QColor("black")); //设置颜色
pen.setWidth(3); //设置画笔粗细
//准备字体
QFont font;
font.setFamily("楷体"); //设置字体
font.setPointSize(20); //设置字号
//连接画家和画笔
painter.setPen(pen);
//给画家安排字体
painter.setFont(font);
//设置画家坐标起始点
painter.translate(this->width()/2,this->height()/2);
//绘制一个椭圆
painter.drawEllipse(QPoint(0,0),200,200);
//时针刻度
for(int i=0;i<12;i++)
{
painter.rotate(30);
painter.drawLine(QPoint(0,-180),QPoint(0,-200));
}
//分针刻度
for(int i=0;i<60;i++)
{
painter.rotate(6);
painter.drawLine(QPoint(0,-190),QPoint(0,-200));
}
//绘制刻度数字
for(int i=0;i<12;i++)
{
static int num = 1;
QString str = QString::number(num);
painter.rotate(30);
painter.drawText(QPoint(-10,-160),str);
if(num == 12)
{
num = 0;
}
num++;
}
QPainter painter1(this);
painter1.translate(this->width()/2,this->height()/2);
QPen pen1;
pen1.setColor(QColor("green"));
pen1.setWidth(3);
painter1.setPen(pen1);
painter1.rotate(s*6);
painter1.drawLine(0,0,0,-150);
QPainter painter2(this);
painter2.translate(this->width()/2,this->height()/2);
QPen pen2;
pen2.setColor(QColor("blue"));
pen2.setWidth(9);
painter2.setPen(pen2);
painter2.rotate(m*6);
painter2.drawLine(0,0,0,-100);
QPainter painter3(this);
painter3.translate(this->width()/2,this->height()/2);
QPen pen3;
pen3.setColor(QColor("red"));
pen3.setWidth(15);
painter3.setPen(pen3);
painter3.rotate(h*30);
painter3.drawLine(0,0,0,-100);
//更新界面内容
this->update();
}
void Widget::timeout_slot()
{
//获取系统的时间
QTime sysTime = QTime::currentTime();
h = sysTime.hour();
if(h>12)
{
h = h-12;
}else if(h == 24)
{
h = 0;
}
m = sysTime.minute();
s = sysTime.second();
}
DAY74
sun_over_lost2024-09-12 6:04
相关推荐
----云烟----7 小时前
QT中QString类的各种使用「QT(C++)开发工程师」12 小时前
【qt版本概述】一路冰雨16 小时前
Qt打开文件对话框选择文件之后弹出两次老赵的博客17 小时前
QT 自定义界面布局要诀码码哈哈0.017 小时前
VSCode 2022 离线安装插件QT VSTOOl报错此扩展不能安装在任何当前安装的产品上。feiyangqingyun21 小时前
Qt/C++离线地图的加载和交互/可以离线使用/百度和天地图离线/支持手机上运行gz94561 天前
windows下,用CMake编译qt项目,出现错误By not providing “FindQt5.cmake“...「QT(C++)开发工程师」1 天前
Ubuntu 26.04 LTS 大升级:Qt 6 成为未来新引擎兆。2 天前
python实战案例----使用 PyQt5 构建简单的 HTTP 接口测试工具喝哈喝哈2 天前
pycharm中配置pyqt5