circlewidget.h
#ifndef CIRCLAWIDGET_H#define CIRCLAWIDGET_H#include#include #include class CircleWidget:public QFrame{ Q_OBJECTpublic: CircleWidget(QWidget *parent); ~CircleWidget();private: void paintEvent(QPaintEvent *event);public: void Adjust(int period, int grain, int radius); QPoint origin(); // 坐标原点位置 QPoint toCoord(QPoint p); // 将GUI窗口的点(x,y)转换成坐标系统里的点 QPoint fromCoord(QPoint p); // 将坐标系内的(x,y)转成GUI的坐标private: int m_period, m_grain, m_radius;};#endif // CIRCLAWIDGET_H
circlewidget.cpp
# include"circlewidget.h"#include#include #include CircleWidget::CircleWidget(QWidget *parent):QFrame(parent){ m_period = 20; //周期 m_grain = 1; //粒度 m_radius = 10; // 振幅}CircleWidget::~CircleWidget(){}void CircleWidget::paintEvent(QPaintEvent *event){ QPainter painter(this); int width = this->width(); int height = this->height(); QRect rect(0,0, width, height); // 设置背景为黑色 painter.setBrush(QBrush(QColor(0x00,0x00, 0x00))); painter.drawRect(rect); painter.setPen(QPen(QColor(0, 255, 0))); // 设置线条为绿色 QPoint o = origin(); painter.drawLine(QPoint(0, o.y()), QPoint(width, o.y())); // x轴 painter.drawLine(QPoint(o.x(), 0), QPoint(o.x(), height));// y轴 // 正弦曲线: 从坐标原点,向左、向右伸展 QPoint p1(0,0); for(int x=0; x rect(); return r.center();}// 将GUI窗口的点(x,y)转换成数学坐标系统里的点QPoint CircleWidget::toCoord(QPoint p){ // 圆心 QPoint o = this->origin(); QPoint result = p - o; result.setY(0 - result.y()); // y坐标反转 return result;}// 将数学坐标系内的(x,y)转成GUI的坐标QPoint CircleWidget::fromCoord(QPoint p){ // 圆心 QPoint o = this->origin(); p.setY(0 - p.y()); // y坐标反转 return p + o;}
结果: