QT绘制心形图案一

最近无聊想研究一下Qt绘制心形图案,首先想到的是绘制笛卡尔心形线。不过效果不理想,又在网上找到了其它心形公式,效果不错。不过,是因为用点画出来的,填充很麻烦,后续会继续研究如何用曲线画出心形。

.h文件

 1 #pragma once
 2 
 3 #include <QtWidgets/QDialog>
 4 #include "ui_heart.h"
 5 #include <Qpainter>
 6 class Heart : public QDialog
 7 {
 8     Q_OBJECT
 9 public:
10     Heart(QWidget *parent = Q_NULLPTR);
11 protected:
12     void paintEvent(QPaintEvent *);
13     void timerEvent(QTimerEvent *);
14 
15 private:
16     Ui::HeartClass ui;
17     float m_t = 0, m_x = 0, m_y = 0;
18     int m_k = 10;
19 };

.cpp文件

 1 #include "heart.h"
 2 
 3 Heart::Heart(QWidget *parent)
 4     : QDialog(parent)
 5 {
 6     ui.setupUi(this);
 7     startTimer(1);
 8 }
 9 
10 void Heart::paintEvent(QPaintEvent *event)
11 {
12     QPainter painter(this);
13     painter.setPen(Qt::red);
14     painter.drawPoint(m_x, m_y);
15 }
16 
17 void Heart::timerEvent(QTimerEvent *)
18 {
19     if (m_t > 1000)
20     {
21         update();
22         m_t = 0;
23     }
24     m_x = 16 * m_k * sin(m_k*m_t)*sin(m_k*m_t)*sin(m_k*m_t);
25     m_y = 13 * m_k * cos(m_k*m_t) - 5 * m_k * cos(2 * m_k * m_t) - 2 * m_k * cos(3 * m_k * m_t) - cos(4 * m_k * m_t);
26     m_x += this->width() / 2;
27     m_y -= this->height() / 2;
28     m_y *= -1;
29     update(m_x,m_y,1,1);
30     m_t += 0.1;
31     
32 }

效果图

 

猜你喜欢

转载自www.cnblogs.com/liuxianglei/p/9265859.html