QCHART的几种坐标轴的详细介绍及使用代码示例
QCHART主要有如下几种坐标轴:
QAbstractAxis->QBarCategoryAxis:柱状图坐标轴文字
QAbstractAxis->QDateTimeAxis:日期坐标轴
QAbstractAxis->QLogValueAxis(对数做标轴)
QAbstractAxis->QValueAxis(设置坐标轴范围)->QCategoryAxis(文字描述坐标轴)
下面详细介绍各种坐标轴的使用代码:
1 QAbstractAxis->QBarCategoryAxis:柱状图坐标轴文字
QChartView *chartView = new QChartView;
QBarSeries *series = new QBarSeries;
// ...
chartView->chart()->addSeries(series);
chartView->chart()->createDefaultAxes();
QBarCategoryAxis *axisX = new QBarCategoryAxis;
QStringList categories;
categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun";
axisX->append(categories);
axisX->setRange("Feb", "May");
chartView->chart()->setAxisX(axisX, series);
2 QDateTimeAxis:日期坐标轴
QChartView *chartView = new QChartView;
chartView->chart()->addSeries(series);
// ...
QDateTimeAxis *axisX = new QDateTimeAxis;
axisX->setFormat("dd-MM-yyyy h:mm");
chartView->chart()->setAxisX(axisX, series);
3 QAbstractAxis->QLogValueAxis(对数做标轴)
QValueAxis *axisX = new QValueAxis();
axisX->setTitleText("Data point");
axisX->setLabelFormat("%i");
axisX->setTickCount(series->count());
chart->addAxis(axisX, Qt::AlignBottom);
series->attachAxis(axisX);
QLogValueAxis *axisY = new QLogValueAxis();
axisY->setTitleText("Values");
axisY->setLabelFormat("%g");
axisY->setBase(8.0);
axisY->setMinorTickCount(-1);
chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisY);
4 QValueAxis(设置坐标轴范围)
QChartView *chartView = new QChartView;
QLineSeries *series = new QLineSeries;
// ...
chartView->chart()->addSeries(series);
QValueAxis *axisX = new QValueAxis;
axisX->setRange(10, 20.5);
axisX->setTickCount(10);
axisX->setLabelFormat("%.2f");
chartView->chart()->setAxisX(axisX, series);
5 QCategoryAxis(文字描述坐标轴)
QChartView *chartView = new QChartView;
QLineSeries *series = new QLineSeries;
// ...
chartView->chart()->addSeries(series);
QCategoryAxis *axisY = new QCategoryAxis;
axisY->setMin(0);
axisY->setMax(52);
axisY->setStartValue(15);
axisY->append("First", 20);
axisY->append("Second", 37);
axisY->append("Third", 52);
chartView->chart()->setAxisY(axisY, series);
代码示例:
可以直接运行产生,熟悉chart和棒图使用的过程。
#include "mainwindow.h"
#include <QApplication>
#include <QWidget>
#include <QBarSet>
#include <QBarSeries>
#include <QBarCategoryAxis>
#include <QTableWidget>
#include <QChart>
#include <QChartView>
#include <QValueAxis>
#include <QString>
#include <QTimer>
#include <QMessageBox>
#include <QDebug>
#include <QDateTime>
#include <QDateTimeAxis>
#include <QLineSeries>
#include<QTime>
QT_CHARTS_USE_NAMESPACE
QChart * updateBarDataOld()
{
QBarSet *set0 = new QBarSet("Jane");
QBarSet *set1 = new QBarSet("John");
QBarSet *set2 = new QBarSet("Axel");
QBarSet *set3 = new QBarSet("Mary");
QBarSet *set4 = new QBarSet("Samantha");
*set0 << 1 << 2 << 3 << 4 << 5 << 6;// Jane 6个月份的值
*set1 << 5 << 0 << 0 << 4 << 0 << 7;
*set2 << 3 << 5 << 8 << 19<< 8 << 5;
*set3 << 5 << 6 << 7 << 3 << 4 << 5;
*set4 << 9 << 7 << 5 << 3 << 1 << 2;
//![1]
//![2]
QBarSeries *series = new QBarSeries();
series->append(set0);
series->append(set1);
series->append(set2);
series->append(set3);
series->append(set4);
//![2]
//![3]
QChart *chart = new QChart(); // 实例化QChart
chart->addSeries(series); //往Chart里添加series
chart->setTitle("Simple barchart example"); //设置表格头
chart->setAnimationOptions(QChart::SeriesAnimations);
//![3]
//![4]
QStringList categories; //创建字符串List
categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun";
QBarCategoryAxis *axis = new QBarCategoryAxis(); //实例化坐标轴文字标识轴
axis->append(categories); //将字符串列表append到文字标识轴里
chart->createDefaultAxes();//创建默认的坐标轴(笛卡尔坐标),一定要有这一句
chart->setAxisX(axis, series);//设置坐标轴
//![4]
//![5]
chart->legend()->setVisible(true); //设置图例为显示状态
chart->legend()->setAlignment(Qt::AlignBottom);//设置图例的显示位置在底部
//![5]
return chart;
}
QChart * updateBarData()
{
QBarSeries *series = new QBarSeries();
for(int i = 0 ; i < 2; i++)
{
QBarSet *set = new QBarSet(QString("Date-%1").arg(i));
// *set << i * 100 ;
// *set << i * 100 << i * 100 ;
*set << i * 100 << i * 100<< i * 100 ;
// *set << i * 100 << i * 100<< i * 100<< i * 100 ;
// *set << i * 100 << i * 100<< i * 100<< i * 100<< i * 100 ;
// *set << i * 100 << i * 100<< i * 100<< i * 100<< i * 100<< i * 100;
series->append(set);
}
//![3]
QChart *chart = new QChart(); // 实例化QChart
chart->addSeries(series); //往Chart里添加series
chart->setTitle("Simple barchart example"); //设置表格头
chart->setAnimationOptions(QChart::SeriesAnimations);
//![3]
//![4]
QStringList categories; //创建字符串List
//categories << "Jan" << "Feb" << "Mar" << "Apr" << "May" << "Jun";
// categories << "Date-0" ;
// categories << "Date-0" << "Date-1" ;
categories << "Date-0" << "Date-1" << "Date-2" ;
// categories << "Date-0" << "Date-1" << "Date-2" << "Date-3" ;
// categories << "Date-0" << "Date-1" << "Date-2" << "Date-3" << "Date-4" ;
// categories << "Date-0" << "Date-1" << "Date-2" << "Date-3" << "Date-4" << "Date-5";
QBarCategoryAxis *axis = new QBarCategoryAxis(); //实例化坐标轴文字标识轴
axis->append(categories); //将字符串列表append到文字标识轴里
chart->createDefaultAxes();//创建默认的坐标轴(笛卡尔坐标),一定要有这一句
chart->setAxisX(axis, series);//设置坐标轴s
//![4]
//![5]
chart->legend()->setVisible(true); //设置图例为显示状态
chart->legend()->setAlignment(Qt::AlignBottom);//设置图例的显示位置在底部
//![5]
return chart;
}
QChart * updateBarData1(QVector<QVector<int>> &vecBarSet, QStringList strList)
{
//![2]
QBarSeries *series = new QBarSeries();
for(int i = 0; i < vecBarSet.size(); i++)
{
//![1] 初始化图例名称
QBarSet * set = new QBarSet(QString("date-%1").arg(i));
for(int j = 0; j < vecBarSet[i].size(); j++)
{
*set << vecBarSet[i][j];
}
series->append(set);
}
//![2]
//![3]
QChart *chart = new QChart(); // 实例化QChart
chart->addSeries(series); //往Chart里添加series
chart->setTitle("Simple barchart example"); //设置表格头
chart->setAnimationOptions(QChart::SeriesAnimations);
//![3]
//![4]
QBarCategoryAxis *axis = new QBarCategoryAxis(); //实例化坐标轴文字标识轴
axis->append(strList); //将字符串列表append到文字标识轴里
chart->createDefaultAxes();//创建默认的坐标轴(笛卡尔坐标),一定要有这一句
chart->setAxisX(axis, series);//设置坐标轴s
//![4]
//![5]
chart->legend()->setVisible(false); //设置图例为显示状态
chart->legend()->setAlignment(Qt::AlignBottom);//设置图例的显示位置在底部
//![5]
return chart;
}
void sleep(unsigned int msec)
{
//currnentTime 返回当前时间 用当前时间加上我们要延时的时间msec得到一个新的时刻
QTime reachTime = QTime::currentTime().addMSecs(msec);
//用while循环不断比对当前时间与我们设定的时间
while(QTime::currentTime() < reachTime)
{
//如果当前的系统时间尚未达到我们设定的时刻,就让Qt的应用程序类执行默认的处理,
//以使程序仍处于响应状态。一旦到达了我们设定的时刻,就跳出该循环,继续执行后面的语句。
QApplication::processEvents(QEventLoop::AllEvents,100);
}
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow window;
//Test 1
QChart * chart;
chart = updateBarData();
QChartView *chartView0 = new QChartView(chart);
chartView0->setRenderHint(QPainter::Antialiasing);
window.setCentralWidget(chartView0);
window.resize(420, 300);
window.show();
return a.exec();
return 0;
//Test 2
QStringList categories; //创建字符串List
QVector<QVector<int>> vecDateStr;
QVector<int> vecValues;
categories << "date-0";
vecValues.push_back(100);
vecDateStr.push_back(vecValues);
chart = updateBarData1(vecDateStr, categories);
sleep(2000);
QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
window.setCentralWidget(chartView);
window.resize(420, 300);
window.show();
vecValues.clear();
vecDateStr.clear();
categories << "date-0" << "date-1" ;
vecValues.push_back(100);
vecValues.push_back(500);
vecDateStr.push_back(vecValues);
chart = updateBarData1(vecDateStr, categories);
sleep(1000);
QChartView *chartView1 = new QChartView(chart);
chartView1->setRenderHint(QPainter::Antialiasing);
window.setCentralWidget(chartView1);
window.resize(420, 300);
window.show();
vecValues.clear();
vecDateStr.clear();
categories << "date-0" << "date-1" << "date-2" ;
vecValues.push_back(100);
vecValues.push_back(500);
vecValues.push_back(300);
vecDateStr.push_back(vecValues);
chart = updateBarData1(vecDateStr, categories);
sleep(2000);
QChartView *chartView2 = new QChartView(chart);
chartView2->setRenderHint(QPainter::Antialiasing);
window.setCentralWidget(chartView2);
window.resize(420, 300);
window.show();
vecValues.clear();
vecDateStr.clear();
categories << "date-0" << "date-1" << "date-2" << "date-3" ;
vecValues.push_back(100);
vecValues.push_back(500);
vecValues.push_back(300);
vecValues.push_back(500);
vecDateStr.push_back(vecValues);
chart = updateBarData1(vecDateStr, categories);
sleep(2000);
QChartView *chartView3 = new QChartView(chart);
chartView3->setRenderHint(QPainter::Antialiasing);
window.setCentralWidget(chartView3);
window.resize(420, 300);
window.show();
vecValues.clear();
vecDateStr.clear();
categories << "date-0" << "date-1" << "date-2" << "date-3" << "date-4";
vecValues.push_back(100);
vecValues.push_back(500);
vecValues.push_back(300);
vecValues.push_back(500);
vecValues.push_back(900);
vecDateStr.push_back(vecValues);
chart = updateBarData1(vecDateStr, categories);
//显示容器 QChartView
QChartView *chartView4 = new QChartView(chart);
chartView4->setRenderHint(QPainter::Antialiasing);
window.setCentralWidget(chartView4);
window.resize(420, 300);
window.show();
return a.exec();
}
运行结果:

main函数中,可以根据自己的需要,改变棒图的数量和信息。
本文详细介绍了QCHART库中的几种坐标轴类型,包括QBarCategoryAxis(柱状图坐标轴)、QDateTimeAxis(日期坐标轴)、QLogValueAxis(对数坐标轴)和QValueAxis(数值坐标轴),并提供了相应的设置和使用代码示例,适用于创建和自定义图表坐标轴。

2235

被折叠的 条评论
为什么被折叠?



