MainWindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QTimer> class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = 0); ~MainWindow(); void timerEvent(QTimerEvent *); void paintEvent(QPaintEvent *event); private: int m_x,m_y; int m_k; float m_t; }; #endif // MAINWINDOW_H
MainWindow.cpp
#include "mainwindow.h" #include <QDebug> #include <math.h> #include <QPainter> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { this->setFixedSize(600,600); m_k = 10; m_t = 0; startTimer(1); } MainWindow::~MainWindow() { } void MainWindow::timerEvent(QTimerEvent *) { qDebug() << "timer event " << m_t; if (m_t > 500) { update(); m_t = 0; } m_x = 16 * m_k * sin(m_k*m_t)*sin(m_k*m_t)*sin(m_k*m_t); 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); m_x += this->width() / 2; m_y -= this->height() / 2; m_y *= -1; update(m_x,m_y,1,1); m_t += 0.1; } #if 1 void MainWindow::paintEvent(QPaintEvent *event) { qDebug() << "paintEvent " << m_x << " " << m_y; QPainter painter(this); painter.setPen(Qt::red); painter.drawPoint(m_x, m_y); } #else void MainWindow::paintEvent(QPaintEvent *event) { double k = 10; QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing, true); QColor my_color(237, 162, 255, 255); QBrush my_brush(my_color); painter.setPen(Qt::red); /*painter.setBrush(my_brush);*/ painter.translate(this->width()/2, this->height()/2); QPainterPath polygonPath; polygonPath.setFillRule(Qt::WindingFill); float x = 16 * k * sin(0.0)*sin(0.0)*sin(0.0); float y = 13 * k * cos(0.0) - 5 * k*cos(0.0) - 2 * k*cos(0.0) - cos(0.0); polygonPath.moveTo(x, -y); for (double t = 0.01; t < 100; t += 0.05) { x = 16 * k * sin(k*t)*sin(k*t)*sin(k*t); y = 13 * k * cos(k*t) - 5 * k * cos(2 * k * t) - 2 * k * cos(3 * k * t) - cos(4 * k * t); polygonPath.lineTo(x, -y); #if 0 painter.drawPoint(x,-y); painter.drawLine(0,0,x,-y); painter.drawLine(0,0,x+100,-y); #endif } painter.drawPath(polygonPath); } #endif