QT中使用图表之QChart绘制折线图

下面是一个折线图

绘制折线需要用到的轴为数值轴QValueAxis,用到的系列为折线系列QLineSeries

下面是步骤:

1、创建图表视图QChartView

QChartView* view=new QChartView(this);

2、创建图表QChart

QChart* chart=new QChart();

3、将图表设置给图表视图

view->setChart(chart);

5、(可选)给图表设置标题void QChart::setTitle(const QString &title)

view->setChart(chart);

6、创建X轴,设置轴的各种属性,然后将轴添加到图表的底部

QValueAxis * axisX = new QValueAxis;
axisX -> setRange(0, 100); //设置轴的取值范围
axisX -> setTitleText("x轴"); //设置轴的标题
axisX -> setTitleBrush(Qt::red); //设置轴标题的颜色
axisX -> setGridLineColor(Qt::green); //设置网格线的颜色
axisX -> setGridLineVisible(true); //设置网格线是否显示(默认是显示的)
axisX -> setTickCount(11); //设置刻度的个数
axisX -> setMinorTickCount(3); //设置子刻度的个数,不设置则不显示子刻度
axisX -> setMinorGridLineVisible(false);//设置子刻度对应的网格线是否显示
axisX -> setLabelFormat("%d"); //设置刻度值的精度,比如显示整数%d,保留2位小数%.2f
axisX -> setLabelsVisible(true); //设置刻度值是否显示(默认是显示的)
axisX -> setLabelsAngle(30); //设置刻度值的倾斜角度 顺时针旋转的

//通过设置画笔来设置轴的颜色和粗细
QPen pen;
pen.setWidth(1);
pen.setColor(Qt::black);
axisX -> setLinePen(pen);

//把X轴添加到Qhart的底部,同样一个轴对象只能添加进去一次,再次添加就不生效
chart -> addAxis(axisX, Qt::AlignBottom);

其中有很多属性可以设置,上面设置了一些常用的,还有其他属性可查手册 ,需要注意的是同一个轴只能添加进图表一次,再次添加则不会生效,这个轴的位置可以在左边也可以在底部也可以在右边.......

7、创建Y轴,设置轴的各种属性,然后将轴添加到图表的左边

QValueAxis * axisY = new QValueAxis();
axisY -> setGridLineColor(Qt::blue);
axisY -> setTitleText("Y轴");
axisY -> setRange(1000, 2000);
axisY -> setTickCount(11);
axisY -> setLabelFormat("%d");
chart -> addAxis(axisY, Qt::AlignLeft);

y轴同理 

8、创建折线系列,设置系列的各种属性,给系列添加点,然后把系列添加到图表中

//创建折线系列
QLineSeries * line = new QLineSeries(this);
line -> setColor(QColor(255, 0, 0)); //设置系列的颜色
line -> setPointsVisible(true);
//line->setPen(pen);//除此之外还可以给系列设置画笔来控制系列的颜色和粗细
line -> setName("折线系列"); //设置图例的名称
//Qt6.2之后还可以设定每个点的样式
//给折线系列添加点
line -> append(0, 1200);
line -> append(20, 1800);
line -> append(30, 1400);
line -> append(40, 1900);
line -> append(60, 1300);
//把系列添加到QChart中
chart -> addSeries(line);

我们还可以控制点是否显示,以及点的文本,Qt6.2之后还可以单独设定每个点的样式 

9、关联系列和xy轴,使系列显示的位置正确

//调用折线系列的方法 关联 系列和xy轴,否则点的显示位置不正确,下面的代码必须放在addSeries之后执行
// chart->setAxisX(axisX,line);//还可以使用QChart的方法来关联 系列和xy轴
// chart->setAxisY(axisY,line);
line -> attachAxis(axisX);
line -> attachAxis(axisY);

完整代码

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QtCharts>
#include<QHBoxLayout>

class Widget: public QWidget {
    Q_OBJECT

    public:
        Widget(QWidget * parent = nullptr): QWidget(parent) {
            resize(800, 600);
            QHBoxLayout * h_box = new QHBoxLayout(this);
            DrawLineSeries();

        }
        ~Widget() =
        default;

    //画折线
    void DrawLineSeries() {
        //1、创建视图
        QChartView * view = new QChartView(this);

        this -> layout() -> addWidget(view);

        //2.创建图表
        QChart * chart = new QChart();

        //将图表设置给图表视图
        view -> setChart(chart);

        //设置标题
        chart -> setTitle("折线图");

        //添加数值轴
        //X轴
        QValueAxis * axisX = new QValueAxis;
        axisX -> setRange(0, 100); //设置轴的取值范围
        axisX -> setTitleText("x轴"); //设置轴的标题
        axisX -> setTitleBrush(Qt::red); //设置轴标题的颜色
        axisX -> setGridLineColor(Qt::green); //设置网格线的颜色
        axisX -> setGridLineVisible(true); //设置网格线是否显示(默认是显示的)
        axisX -> setTickCount(11); //设置刻度的个数
        axisX -> setMinorTickCount(3); //设置子刻度的个数
        axisX -> setMinorGridLineVisible(false);
        axisX -> setLabelFormat("%d"); //设置刻度值的精度,比如显示整数%d,保留2位小数%.2f
        axisX -> setLabelsVisible(true); //设置刻度值是否显示(默认是显示的)
        axisX -> setLabelsAngle(30); //设置刻度值的倾斜角度 顺时针旋转的
        //通过设置画笔来设置轴的颜色和粗细
        QPen pen;
        pen.setWidth(1);
        pen.setColor(Qt::black);
        axisX -> setLinePen(pen);

        //把X轴添加到Qhart的底部,同样一个轴对象只能添加进去一次,再次添加就不生效
        chart -> addAxis(axisX, Qt::AlignBottom);

        //y轴
        QValueAxis * axisY = new QValueAxis();
        axisY -> setGridLineColor(Qt::blue);
        axisY -> setTitleText("Y轴");
        axisY -> setRange(1000, 2000);
        axisY -> setTickCount(11);
        axisY -> setLabelFormat("%d");
        chart -> addAxis(axisY, Qt::AlignLeft);

        //创建折线系列
        QLineSeries * line = new QLineSeries(this);
        line -> setColor(QColor(255, 0, 0)); //设置系列的颜色
        line -> setPointsVisible(true);
        //line->setPen(p);//除此之外还可以给系列设置画笔来控制系列的颜色和粗细
        line -> setName("折线系列"); //设置图例的名称
        //给折线系列添加点
        line -> append(0, 1200);
        line -> append(20, 1800);
        line -> append(30, 1400);
        line -> append(40, 1900);
        line -> append(60, 1300);
        //把系列添加到QChart中
        chart -> addSeries(line);

        //调用折线系列的方法 关联 系列和xy轴,否则点的显示位置不正确,下面的代码必须放在addSeries之后执行
        // chart->setAxisX(axisX,line);//还可以使用QChart的方法来关联 系列和xy轴
        // chart->setAxisY(axisY,line);
        line -> attachAxis(axisX);
        line -> attachAxis(axisY);
    }


};
#endif // WIDGET_H

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值