把数据都按照一个一个的点画吧!
给你写了个例子:
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
基本思路就这样,自己对它优化一下。