淄博做网站小程序的公司,建设网站设计,自助注册搭建网站,上海建站哪家好显然X轴是日期时间轴的话#xff0c;那么我们使用的轴类就得是QDateTimeAxis
QChart中日期时间轴的精度是毫秒
因此图表里面的数据的x值需要是一个毫秒数#xff0c;才能显示出来 --------------------------------------------------------------------------------------…显然X轴是日期时间轴的话那么我们使用的轴类就得是QDateTimeAxis
QChart中日期时间轴的精度是毫秒
因此图表里面的数据的x值需要是一个毫秒数才能显示出来 ---------------------------------------------------------------------------------------------------------------------------------
步骤和画折线图一模一样只不过使用的轴是日期时间轴QDateTimeAxis
1、创建图表视图
QChartView* viewnew QChartView(this);
2、创建图表
QChart* chartnew QChart();
3、将图表设置给图表视图
view-setChart(chart);
4、构建x轴-日期时间轴设置轴的属性并将轴添加到图表中
在设置轴的范围时传入的是2个QDateTime
QDateTimeAxis * axisX new QDateTimeAxis(this);
axisX - setTitleText(时间轴); //设置轴的标题
axisX - setRange(QDateTime(QDate(2000, 01, 01), QTime(0, 0, 0)),QDateTime(QDate(2000, 12, 31), QTime(0, 0, 0))); //设置时间轴的范围,参数是两个时期时间QDateTime
axisX - setTickCount(13); //设置刻度个数
axisX - setFormat(MM月dd日); //设置刻度值的格式和格式化时间字符串一样
axisX - setLabelsAngle(45);
chart - addAxis(axisX, Qt::AlignBottom); //添加轴
5、构建y轴-数值轴设置轴的属性并将轴添加到图表中
QValueAxis * axisY new QValueAxis(this);
axisY - setRange(1000, 2000);
axisY - setTickCount(11);
axisY - setTitleText(Y轴);
chart - addAxis(axisY, Qt::AlignLeft);
6、构建图标里的系列具体的图将系列添加到图表中
在追加数据点时x轴的是需要的是一个毫秒数才能显示出来
QLineSeries * line new QLineSeries(this);
line - setName(时间轴); //设置图例文本
//要调用毫米精度的这个函数toMSecsSinceEpoch()转成时间戳,否则显示不出来
line - append(QDateTime(QDate(2000, 01, 01), QTime(0, 0, 0)).toMSecsSinceEpoch(), 1200);
line - append(QDateTime(QDate(2000, 02, 01), QTime(0, 0, 0)).toMSecsSinceEpoch(), 1400);
line - append(QDateTime(QDate(2000, 03, 01), QTime(0, 0, 0)).toMSecsSinceEpoch(), 1100);
line - append(QDateTime(QDate(2000, 04, 01), QTime(0, 0, 0)).toMSecsSinceEpoch(), 1600);
line - append(QDateTime(QDate(2000, 05, 01), QTime(0, 0, 0)).toMSecsSinceEpoch(), 1300);
chart - addSeries(line);
7、将轴附加到系列是点显示在正确的位置上
line-attachAxis(axisX);
line-attachAxis(axisY);
完整代码
#ifndef WIDGET_H
#define WIDGET_H#include QWidget
#includeQtCharts
#includeQHBoxLayoutclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent nullptr) : QWidget(parent){resize(800,600);QHBoxLayout* h_boxnew QHBoxLayout(this);DrawLineOfTime();}~Widget()default;//绘制横坐标为时间的折线图void DrawLineOfTime(){//1、创建图表视图QChartView* viewnew QChartView(this);this-layout()-addWidget(view);//2.创建图表QChart* chartnew QChart();//3.将图表设置给图表视图view-setChart(chart);//设置标题chart-setTitle(时间图);chart-legend()-show();//显示或者隐藏图例默认显示//4.构建x轴-日期时间轴QDateTimeAxis* axisXnew QDateTimeAxis(this);axisX-setTitleText(时间轴);//设置轴的标题axisX-setRange(QDateTime(QDate(2000,01,01),QTime(0,0,0)),QDateTime(QDate(2000,12,31),QTime(0,0,0)));//设置时间轴的范围,参数是两个时期时间QDateTimeaxisX-setTickCount(13);//设置刻度个数axisX-setFormat(MM月dd日);//设置刻度值的格式和格式化时间字符串一样axisX-setLabelsAngle(45);chart-addAxis(axisX,Qt::AlignBottom);//添加轴//5.构建y轴-数值轴QValueAxis* axisYnew QValueAxis(this);axisY-setRange(1000,2000);axisY-setTickCount(11);axisY-setTitleText(Y轴);chart-addAxis(axisY,Qt::AlignLeft);//6.构建折线系列QLineSeries* linenew QLineSeries(this);line-setName(时间轴);//设置图例文本//要调用毫米精度的这个函数toMSecsSinceEpoch()转成时间戳,否则显示不出来line-append(QDateTime(QDate(2000,01,01),QTime(0,0,0)).toMSecsSinceEpoch(),1200);line-append(QDateTime(QDate(2000,02,01),QTime(0,0,0)).toMSecsSinceEpoch(),1400);line-append(QDateTime(QDate(2000,03,01),QTime(0,0,0)).toMSecsSinceEpoch(),1100);line-append(QDateTime(QDate(2000,04,01),QTime(0,0,0)).toMSecsSinceEpoch(),1600);line-append(QDateTime(QDate(2000,05,01),QTime(0,0,0)).toMSecsSinceEpoch(),1300);chart-addSeries(line);//7、将xy轴附加到折线line-attachAxis(axisX);line-attachAxis(axisY);}};
#endif // WIDGET_H