最近无聊想研究一下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 }
效果图