QT dibuja un gráfico QSplineSeries

Enlaces relacionados:
QT dibuja un histograma BarChart
QT dibuja un gráfico circular PieChart
QT dibuja un gráfico de líneas LineChart
QT dibuja un gráfico de dispersión ScatterChart
QT dibuja un gráfico de áreas AreaChart

0. Crear ventana de interfaz de usuario:

Principalmente arrastre unoHorizontal Layout
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

1. Cree un objeto Qchart:

QChart *chart = new QChart();
chart->setTitle("折线图图演示"); //设置表格标题

2. Cree un objeto QSplineSeries:

QSplineSeries *series1 = new QSplineSeries(chart);
QSplineSeries *series2 = new QSplineSeries(chart);
// 
series1->setName("A店铺接单数");
series2->setName("B店铺接单数");
// 设置节点数值
*series1 << QPointF(0,4) << QPointF(2,7) << QPointF(3,9) << QPointF(8,13) << QPointF(9,16);
*series2 << QPointF(0,1) << QPointF(3,4) << QPointF(4,7) << QPointF(6,11) << QPointF(8,15)<< QPointF(9,18);

3. Agregue QSplineSeries a QChart

chart->addSeries(series1);
chart->addSeries(series2);

4. Graficar ajustes de efectos completos:

//设置动画效果
chart->setAnimationOptions(QChart::AllAnimations);

chart->createDefaultAxes();//设置网格线
chart->axes(Qt::Horizontal).first()->setRange(0, 7);//设置x轴范围
chart->axes(Qt::Vertical).first()->setRange(0, 20);//设置y轴范围

// Add space to label to add space between labels and axis 在标签和轴之间加空格
QValueAxis *axisY = qobject_cast<QValueAxis*>(chart->axes(Qt::Vertical).first());
Q_ASSERT(axisY);
axisY->setLabelFormat("%.1f  ");

//设置图表主题(会修改到扇区的颜色)
// 可选: QChart::ChartThemeLight
// QChart::ChartThemeBlueCerulean
// QChart::ChartThemeDark
// QChart::ChartThemeBrownSand
// QChart::ChartThemeBlueNcs
// QChart::ChartThemeHighContrast
// QChart::ChartThemeBlueIcy
// QChart::ChartThemeQt
chart->setTheme(QChart::ChartThemeDark);

5. Gráfico de visualización:

QChartView *chartView;
chartView = new QChartView(chart);
ui->verticalLayout->insertWidget(chartView);

La presentación general del código:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QtCharts>

QT_BEGIN_NAMESPACE
namespace Ui {
    
     class MainWindow; }
QT_END_NAMESPACE

QT_CHARTS_BEGIN_NAMESPACE
class QChartView;
class QChart;
QT_CHARTS_END_NAMESPACE

QT_CHARTS_USE_NAMESPACE

class MainWindow : public QMainWindow
{
    
    
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
    QChart * createSplineChart() const; // 绘制自定义的曲线图
private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

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

	// 创建QChartView 对象
	QChartView *chartView;
	// QChartView 对象载入曲线图
	chartView = new QChartView(createSplineChart());
	// 显示图标
	ui->verticalLayout->insertWidget(chartView);

}

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

//绘制曲线图
QChart *MainWindow::createSplineChart() const
{
    
    
    QChart *chart = new QChart();
    chart->setTitle("曲线图演示");


    QSplineSeries *series1 = new QSplineSeries(chart);
    QSplineSeries *series2 = new QSplineSeries(chart);
    series1->setName("A店铺接单数");
    series2->setName("B店铺接单数");
    *series1 << QPointF(0,4) << QPointF(2,7) << QPointF(3,9) << QPointF(8,13) << QPointF(9,16);
    *series2 << QPointF(0,1) << QPointF(3,4) << QPointF(4,7) << QPointF(6,11) << QPointF(8,15)<< QPointF(9,18);

    chart->addSeries(series1);
    chart->addSeries(series2);


    chart->createDefaultAxes();
    chart->axes(Qt::Horizontal).first()->setRange(0, 9);
    chart->axes(Qt::Vertical).first()->setRange(0, 20);

    // Add space to label to add space between labels and axis 在标签和轴之间加空格
    QValueAxis *axisY = qobject_cast<QValueAxis*>(chart->axes(Qt::Vertical).first());
    Q_ASSERT(axisY);
    axisY->setLabelFormat("%.1f  ");
    chart->setTheme(QChart::ChartThemeLight);
    return chart;
}

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/sazass/article/details/112892959
Recomendado
Clasificación