当前位置: 首页 > news >正文

坐牢第三十八天(Qt)

1、使用Qt绘画事件处理画一个闹钟

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QDebug>
#include <QPaintEvent>//画画处理事件
#include <QPainter>//画画
#include <QTime>   //时间类
#include <QTimer> //计时器类
#include <QIcon> //图标类
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void paintEvent(QPaintEvent *event);//绘制事件
public slots://timeout信号的槽函数void timeout_slot();private:Ui::Widget *ui;QPoint startpoin;//绘制起始点QTimer* timer1;  //定义一个定时器类的指针quint8 hour;quint8 minute;quint8 second;int cnt;};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QtMath>
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);this->setFixedSize(800,800);//设置固定大小this->setWindowTitle("牛逼的闹钟");this->setWindowIcon(QIcon(":/icon/naozhong.png"));//设置窗体图标timer1 = new QTimer(this);//给定时器类指针实例化对象timer1->start(1000);//将定时器类对象的timeout信号与自定义的槽函数进行连接connect(timer1,&QTimer::timeout,this,&Widget::timeout_slot);}Widget::~Widget()
{delete ui;
}
//绘制事件处理函数
void Widget::paintEvent(QPaintEvent *event)
{QTime timer =QTime::currentTime();//获取当前时间QString t=timer.toString("hh:mm:ss");//转换为字符串QStringList tlist =t.split(":"); //以 :分割thour =tlist[0].toUInt(); //将小时传化为无符号整数minute =tlist[1].toUInt(); //将分钟传化为无符号整数second =tlist[2].toUInt(); //将秒传化为无符号整数QPainter painter(this);//实例化一个画家painter.setRenderHint(QPainter::Antialiasing, true);//准备画笔QPen pen;pen.setColor(QColor("black"));//设置颜色//给画家安排上画笔painter.setPen(pen);//设置画家坐标起点painter.translate(this->width()/2,this->height()/2);QBrush brush1(QColor("skyblue"));//刷子painter.setBrush(brush1);//给大圆填充//绘制一个圆painter.drawEllipse(QPoint(0,0),300,300);QBrush brush(QColor("red"));//刷子painter.setBrush(brush);//给节点填充//给中心点画一个节点painter.drawEllipse(QPoint(0,0),10,10);//绘制小时刻度线for(int i=0;i<12;i++){pen.setColor(QColor("black"));pen.setWidth(3);painter.setPen(pen);painter.drawLine(QPoint(0,300),QPoint(0,280));//画一个长度20的直线painter.rotate(30);//旋转画家 30度}//绘制每五分钟刻度线for(int i=0;i<60;i++){pen.setColor(QColor("black"));pen.setWidth(1);painter.setPen(pen);painter.drawLine(QPoint(0,300),QPoint(0,290));//画一个长度10的直线painter.rotate(6);//旋转画家 6度}painter.setPen(QColor(100,100,100));QFont font;font.setFamily("SimHei");font.setPointSize(16);painter.setFont(font);//绘制数字for(int i=0;i<12;++i){QPointF point(0,0);painter.save();//计算并移动绘图对象中心点point.setX(250*qCos(((60-i*30)*3.14)/180)); //我看不懂 你写就对了point.setY(250*qSin(((60-i*30)*3.14)/180));  //我看不懂 你写就对了//计算并移动绘图对象的中心点painter.translate(point.x(),-point.y());//绘制路径painter.drawText(-15, -15, 30, 30,Qt::AlignCenter,QString::number(i+1));//我看不懂 你写就对了painter.restore();}//绘制小时指针QPainter painterH(this);painterH.translate(this->width()/2,this->height()/2);pen.setColor(QColor("red"));pen.setWidth(6);painterH.setPen(pen);painterH.rotate(hour*30+(minute/10)+second/10);painterH.drawLine(0,0,0,-90);//绘制分钟指针QPainter painterM(this);painterM.translate(this->width()/2,this->height()/2);pen.setColor(QColor("green"));pen.setWidth(4);painterM.setPen(pen);painterM.rotate(minute*6+second/60*6);painterM.drawLine(0,0,0,-120);//绘制秒指针QPainter painterS(this);painterS.translate(this->width()/2,this->height()/2);pen.setColor(QColor("blue"));pen.setWidth(2);painterS.setPen(pen);painterS.rotate(second*6);painterS.drawLine(0,0,0,-150);
}
//timeout信号的槽函数
void Widget::timeout_slot()
{update();
}

效果图

 

2、思维导图


http://www.mrgr.cn/news/25044.html

相关文章:

  • 2024开学季,这五款学生必备好物请不要错过!
  • 从0到1训练私有大模型技能与应用实现:企业急迫需求,抢占市场先机
  • 企业培训系统能为企业带来怎么样的改变
  • Java 原生API实现TCP客户端
  • 【私有云场景案例分享③】批量回归测试自动化流程
  • anaconda安装pytorch
  • 记者协会评审系统-需求分析
  • ESRGAN——老旧照片、视频帧的修复和增强,提高图像的分辨率
  • 短剧系统热门片源正版版权授权,充库+精品
  • 小米商业营销陈高铭:品牌应该多方整合,关注高质量营销 | SMARTIES CHINA 2024终审报道②
  • 月影、书客、米家护眼大路灯值得入手吗?护眼天花板测评pk对决!
  • 基于注意力机制的ResNet18网络架构的眼疾识别
  • 转行软件测试工程师经验总结
  • Python爬取国家统计局最新行政区划代码和城乡划分代码
  • Redis集群_主从复制
  • 无限住宅代理在广告验证中的巧妙应用
  • Matlab对状态机建模的方法
  • 【大模型专栏—入门篇】科研论文疑惑汇总
  • Java 基础语法
  • CPU 和 GPU:为什么GPU更适合深度学习?