下面是一个折线图
绘制折线需要用到的轴为数值轴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