Пример использования QCustomPlot

Автор: | 29 декабря, 2021

Для начала подключим нужные файлы к проекту методом «Добавить существующие файлы …».

После чего добавим в pro файл:

QT += printsupport

printsupport — необходим для совместимости методов писаных в библиотеки QCustomPlot.

Иначе при компиляции получим кучу ошибок:

In function `ZN11QCustomPlot7savePdfERK7QStringiiN3QCP9ExportPenES2_S2_':
ошибка: undefined reference to `_imp___ZN8QPrinterC1ENS_11PrinterModeE'
ошибка: undefined reference to `_imp___ZN8QPrinter17setOutputFileNameERK7QString'
ошибка: undefined reference to `_imp___ZN8QPrinter15setOutputFormatENS_12OutputFormatE'
ошибка: undefined reference to `_imp___ZN8QPrinter12setColorModeENS_9ColorModeE'
ошибка: undefined reference to `_imp___ZNK8QPrinter11printEngineEv'
ошибка: undefined reference to `_imp___ZNK8QPrinter11printEngineEv'
ошибка: undefined reference to `_imp___ZN8QPrinterD1Ev'
ошибка: undefined reference to `_imp___ZN8QPrinterD1Ev'

printsupport — класс который позволяет сделать печать более простой и переносимой.

Далее преобразуем пустой Widget в QCustomPlot. Так же как для Qwt.

Меняем имя преобразованного класса на QCustomPlot и заголовочный файл на qcustomplot.h.

Перейдем к коду:

    // Добавляем график 
    ui->widget->addGraph();

    // Добавляем метки шкалы
    ui->widget->xAxis->setLabel("x");
    ui->widget->yAxis->setLabel("y");

    // Добавляем отображаемый диапазон
    ui->widget->xAxis->setRange(0, 1000);
    ui->widget->yAxis->setRange(0, 1000);

    // Помещаем точки отображения
    ui->widget->graph(0)->setLineStyle(QCPGraph::lsLine);
    ui->widget->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 5));

    // Заполняем значения
    x << 0 << 100 << 200 << 300 << 400 << 500 << 600;
    y << 50 << 150 << 250 << 350 << 450 << 550 << 650;

    // Добавляем данные на график
    ui->widget->graph(0)->setData(x, y);
    
    // Обновляем график
    ui->widget->replot();

Полный листинг:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>


namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QVector<double> x,y;
};

#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    // Добавляем график
    ui->widget->addGraph();

    // Добавляем метки шкалы
    ui->widget->xAxis->setLabel("x");
    ui->widget->yAxis->setLabel("y");

    // Добавляем отображаемый диапазон
    ui->widget->xAxis->setRange(0, 1000);
    ui->widget->yAxis->setRange(0, 1000);

    // Помещаем точки отображения
    ui->widget->graph(0)->setLineStyle(QCPGraph::lsLine);
    ui->widget->graph(0)->setScatterStyle(QCPScatterStyle(QCPScatterStyle::ssDisc, 5));

    // Заполняем значения
    x << 0 << 100 << 200 << 300 << 400 << 500 << 600;
    y << 50 << 150 << 250 << 350 << 450 << 550 << 650;

    // Добавляем данные на график
    ui->widget->graph(0)->setData(x, y);

    // Обновляем график
    ui->widget->replot();

}

MainWindow::~MainWindow()
{
    delete ui;
}

Получим следующее:

QCustomPlot exemple