• 7777阅读
  • 4回复

如何在QT中绘制曲线 [复制链接]

上一主题 下一主题
离线lghlcl
 
只看楼主 倒序阅读 楼主  发表于: 2011-05-12
— 本帖被 XChinux 从 Qt模型/视图编程 移动到本区(2011-05-13) —
我想问下各位大侠:我现在有一组数据,我要根据这些数据来在QT中绘图,请问应该如何做?
离线x9426

只看该作者 1楼 发表于: 2011-05-13
用QPainter应该可以哦
离线lghlcl
只看该作者 2楼 发表于: 2011-05-13
我知道QPainter应该可以,但是我不知道怎么用?有哪位大侠有类似的画直线的例子吗?
离线anthonymo200
只看该作者 3楼 发表于: 2011-05-14
用QPainter的drawline()函数就可以实现。
离线hhshiyi
只看该作者 4楼 发表于: 2011-05-14
把数据都按照一个一个的点画吧!
给你写了个例子:
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
基本思路就这样,自己对它优化一下。
快速回复
限100 字节
 
上一个 下一个