zoukankan      html  css  js  c++  java
  • 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 }

    效果图

     

  • 相关阅读:
    (转)Ubuntu init启动流程分析
    读懂diff
    vs2010 sp1
    Git .gitignore文件的使用
    第一次尝试节奏跑(乳酸门槛跑)
    放松跑、间歇跑、节奏跑和LSD
    Tomcat6配置webdav协议
    Content-disposition
    php5.3到php7.0.x新特性介绍
    随机生成字符串
  • 原文地址:https://www.cnblogs.com/liuxianglei/p/9265859.html
Copyright © 2011-2022 走看看