my-QT专栏

QCharts绘制柱状图,柱高和y轴数据刻度不匹配

2021-10-11  本文已影响0人  c之气三段

QCharts绘制柱状图,柱高和y轴数据刻度不匹配

//在项目pro文件中添加以下内容
 QT       += charts
 
 //在.h文件中添加以下内容,注意:需要将头文件及命名空间添加到ui命名空间之前,否则将提示错误
 #include <QtCharts/QChartView>
 #include <QtCharts/QBarSeries>
 #include <QBarCategoryAxis>
 #include <QValueAxis>
 #include <QBarSet>
 
 QT_CHARTS_USE_NAMESPACE

创建项目,在main.cpp中添加以下内容:

 #include "mainwindow.h"
 #include <QApplication>
 
 int main(int argc, char *argv[])
 {
  QApplication a(argc, argv);
 QBarSet *set0 = new QBarSet("警告");
 QBarSet *set1 = new QBarSet("报警");
 
 *set0 << 1 << 2 << 3 << 5 << 4;
 *set1 << 2 << 4 << 0 << 5 << 4;
 
 QBarSeries *series = new QBarSeries();
 series->append(set0);
 series->append(set1);
 
 QChart *chart = new QChart();
 //chart->addSeries(series);           /************* 该语句应当放置此位置************/
 
 QStringList dateList;
 dateList << "11" << "12" << "13" << "14" << "15";
 QBarCategoryAxis *axisX = new QBarCategoryAxis();
 axisX->append(dateList);
 axisX->setTitleText("日期");
 
 QValueAxis *axisY = new QValueAxis();
 axisY->setRange(0,10);
 axisY->setLabelFormat("%d");
 axisY->setTickCount(6);
 axisY->setTitleText("次数");
 
 chart->setAxisX(axisX, series);                  //设置X坐标轴
 chart->setAxisY(axisY, series);                  //设置Y坐标轴
 
 chart->legend()->setVisible(true);              //设置图例为显示状态
 chart->legend()->setAlignment(Qt::AlignBottom); //设置图例的显示位置在底部
 
 chart->addSeries(series);                 /************* 问题所在************/
 chart->setTitle("火情记录");
 chart->setAnimationOptions(QChart::SeriesAnimations);
 
 QChartView *chartView = new QChartView(chart);
 chartView->setRenderHint(QPainter::Antialiasing);
 
 MainWindow w;
 w.setCentralWidget(chartView);
 w.show();
 
 return a.exec();
 }
程序运行结果如下: img

细心的朋友可以发现,明明数据值最大为5,但是柱状图的最高值为10,这就是问题所在

如果想要解决以上问题,需要将chart对象绑定数据序列放在创建坐标轴之前,修改后程序运行效果如下:

img

问题解决

上一篇 下一篇

猜你喜欢

热点阅读