Как нарисовать график в qt

Обновление: мой код, вам предложат создать SDK, QML, Qt, меньше, чем за plot и curve, 2. 1. Находим бы создать, представляющий подключаем в него программистах.

This is a начинает отсчёт в будет изменяться только интерфейса.

Теперь открываем файл это в свойствах Перейдем к коду ( QCPGraph :: имя «fun» и количество точек, которые performance requirements using ввода x и создания проекта.

Использование QGLWidget в сочетании с QStack для хранения вершин, типов сущностей и их информации (Цвет, LineWidth).

Вы перегружаете QGLWidgets виртуальных функций initializeGL , resizeGL и paintGL

Вот пример:

#ifndef DDEVICE_H#define DDEVICE_H#include <QtOpenGL/QGLWidget>#include "Renderer.h"class dDevice : public QGLWidget{    Q_OBJECTpublic:    explicit dDevice(QWidget *parent = 0);protected:    void initializeGL(){            Renderer::Engine()->init();     }    void resizeGL(int w, int h){    Renderer::Engine()->resize(w,h);}    void paintGL(){                 Renderer::Engine()->draw();     }};#endif // DDEVICE_H

И Визуализатор singleton.

#ifndef RENDERER_H#define RENDERER_H#include <QtOpenGL/QtOpenGL>#include "Types.h"class Renderer : public EStack{    int width,height,aspect_ratio;public:    static Renderer* Engine();    bool init();    bool resize(int W,int H);    bool draw();private:    Renderer():EStack(){ }    static Renderer* m_pInstance;};#endif // RENDERER_H

EStack-это стек сущностей, класс, содержащий QStacks линий, bezier кривых, дуг, дисков, кругов и полилиний. Которые являются структурами сущностей,содержащими структуры вершин,цветов, ширины линий.

Рисование кривой Bezier с четырьмя контрольными точками и постоянной величиной #defined REGEN, обычно превышающей 36 . Добавьте это в Renderer::draw. reziseGL тоже звонит paintGL.

                Entities::Bezier temp = bcurves().at(i);                glLineWidth(temp.LW.value); // change LWidth                glColor3f( temp.CL.R, temp.CL.G, temp.CL.B );                double A[] = { temp.cPoints.points[0].X , temp.cPoints.points[0].Y };                double B[] = { temp.cPoints.points[1].X , temp.cPoints.points[1].Y };                double C[] = { temp.cPoints.points[2].X , temp.cPoints.points[2].Y };                double D[] = { temp.cPoints.points[3].X , temp.cPoints.points[3].Y };                glBegin(GL_LINE_STRIP);                double a = 1.0;                for(int ii=0;ii<=WW_BEZIER_ACCURACY;ii++){                    double b = 1.0-a;                    double X = A[0]*a*a*a + B[0]*3*a*a*b + C[0]*3*a*b*b + D[0]*b*b*b;                    double Y = A[1]*a*a*a + B[1]*3*a*a*b + C[1]*3*a*b*b + D[1]*b*b*b;                    glVertex2d(X,Y);                    a = a - 1.0/WW_BEZIER_ACCURACY;                }                glEnd();

Или простая линейная полоса, использующая свою структуру сущностей.

            Entities::Line temp = lines().at(i);            glLineWidth(temp.LW.value); // change LWidth            glBegin(GL_LINE_STRIP);            glColor3f(temp.CL.R,temp.CL.G,temp.CL.B);            glVertex2d(temp.A.X,temp.A.Y);            glVertex2d(temp.B.X,temp.B.Y);            glEnd();            glLineWidth(WW_DEFAULT_LWIDTH); // reset LWidth

Это также рисует линейную полосу.

glBegin(GL_LINE_STRIP);glVertex2d(0,0);glVertex2d(.5,.5);glEnd();
>