把数据都按照一个一个的点画吧!
给你写了个例子:
main.cpp:
#include <QtGui/QApplication>
#include "draw_point.h"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Draw_point w;
w.show();
return a.exec();
}
draw_point.cpp:
#include "draw_point.h"
#include <QtGui>
#include <math.h>
Draw_point::Draw_point(QWidget *parent) :
QWidget(parent)
{
setMinimumSize(320,240);
resize(640,480);
}
void Draw_point::paintEvent(QPaintEvent *)
{
QPainter painter(this);
drawbackground(&painter);
QPen pen;
pen.setColor(Qt::red);
painter.setPen(pen);
double y;
for(int x=0;x<100;x=x+2)//画直线
{
y=x;//10*sin(x)+10;
painter.drawPoint(x,(int)y);
}
for(int x=0;x<100;x=x+1)//画抛物线
{
y=pow(x,0.5);
painter.drawPoint(x+100,(int)y);
}
for(int x=0;x<100;x=x+1)//画半圆,圆心(50,50)半径 50
{
y=pow(2500-pow(x-50,2),0.5)+50;
painter.drawPoint(x+100,(int)y);
}
///至于负半轴自己解决,思路差不多
}
void Draw_point::drawbackground(QPainter *painter)
{
painter->save();
painter->setPen(Qt::NoPen);
QLinearGradient bgGradient(QPointF(0,0),QPointF(0,height()));
bgGradient.setColorAt(0.0,QColor(40,40,40));
painter->setBrush(bgGradient);
painter->drawRect(rect());
painter->restore();
}
draw_point.h:
#ifndef DRAW_POINT_H
#define DRAW_POINT_H
#include <QtGui>
#include <QWidget>
class Draw_point : public QWidget
{
Q_OBJECT
public:
explicit Draw_point(QWidget *parent = 0);
void paintEvent(QPaintEvent *);
void drawbackground(QPainter *painter);
};
#endif // DRAW_POINT_H
基本思路就这样,自己对它优化一下。