配置
1.需要在pro项目文件中加上以下代码
QT += charts
2.然后修改头文件 ,在头文件中需要添加下面两行代码
#include <QtCharts>
QT_CHARTS_USE_NAMESPACE
如果配置出错,有可能是在安装时没有选择QtCharts模块,需要找打QT安装目录下的MaintenanceTool.exe文件进行重新添加QtCharts模块。
以下代码仅需要添加到源文件main.cpp文件中方可运行,本文参考QtCreator实例仅简单实现了部分图表。
折线图
-
基础折线图
//创建QLineSeries折线图实例 QLineSeries *series = new QLineSeries(); //添加数据两种方式,尽量保证坐标(x,y)中x变量有序 // series->append(0,6); // series->append(4,8); // series->append(8,5); // series->append(11,5); // series->append(13,3); // series->append(17,6); *series<<QPoint(0,6)<<QPoint(4,8)<<QPoint(8,5)<<QPointF(11,5)<<QPointF(13,3)<<QPointF(17,6); //创建QChart实例,将series添加进去 QChart *chart = new QChart(); chart->legend()->hide(); chart->addSeries(series); //设置标题字体 QFont font = qApp->font(); font.setBold(true); font.setPointSize(20); chart->setTitleFont(font); //设置坐标轴 //chart->createDefaultAxes();//默认坐标轴 QValueAxis *axisX=new QValueAxis(); QValueAxis *axisY=new QValueAxis(); chart->addAxis(axisX,Qt::AlignBottom); chart->addAxis(axisY,Qt::AlignLeft); axisX->setRange(0,17); axisY->setRange(0,15); series->attachAxis(axisX); series->attachAxis(axisY); chart->setTitle("基础折线图"); //创建QChartView对象 QChartView *chartView = new QChartView(chart); chartView->setRenderHint(QPainter::Antialiasing); //显示 QMainWindow window; window.setCentralWidget(chartView); window.resize(600, 400); window.show();
-
平滑折线图
//创建QSplineSeries平滑折线图实例 QSplineSeries *series = new QSplineSeries(); //尽量保证坐标(x,y)中x变量有序 *series<<QPoint(0,6)<<QPoint(4,8)<<QPoint(8,5)<<QPointF(11,5)<<QPointF(13,3)<<QPointF(17,6); //创建QChart实例,将series添加进去 QChart *chart = new QChart(); chart->legend()->hide(); chart->addSeries(series); //设置标题字体 QFont font = qApp->font(); font.setBold(true); font.setPointSize(20); chart->setTitleFont(font); //chart->createDefaultAxes();//默认坐标轴 //设置坐标轴 QValueAxis *axisX=new QValueAxis(); QValueAxis *axisY=new QValueAxis(); chart->addAxis(axisX,Qt::AlignBottom); chart->addAxis(axisY,Qt::AlignLeft); axisX->setRange(0,17); axisY->setRange(0,10); series->attachAxis(axisX); series->attachAxis(axisY); chart->setTitle("平滑折线图"); //创建QChartView对象 QChartView *chartView = new QChartView(chart); chartView->setRenderHint(QPainter::Antialiasing); //显示 QMainWindow window; window.setCentralWidget(chartView); window.resize(600, 400); window.show();
饼状图
//创建QPieSeries饼状图实例
QPieSeries *series= new QPieSeries();
// 添加数据
series->append("不及格",15);
series->append("及格",35);
series->append("良好",40);
series->append("优秀",10);
// 设置块标签(显示出百分比)
for(int num=0;num<series->slices().count();num++)
{
QPieSlice *slice =series->slices().at(num);
QString tagText = QString("%1").arg(slice->label()+QStringLiteral(":")+QString::number(slice->percentage()*100)+"%");
slice->setLabel(tagText);
}
// 设置标签显示位置
series->setLabelsPosition(QPieSlice::LabelPosition::LabelOutside);
series->setLabelsVisible(true);
series->slices().at(series->count()-1)->setExploded(true);// 设置最后一个分块突出
series->setHoleSize(0.4);// 设置中心空心圆大小
//图表视图
QChart* chart = new QChart;
chart->setTitle("成绩饼状统计图");
//设置标题字体
QFont font = qApp->font();
font.setBold(true);
font.setPointSize(20);
chart->setTitleFont(font);
//创建QChart实例,将series添加进去
chart->addSeries(series);
chart->setAnimationOptions(QChart::SeriesAnimations);
//图例
chart->legend()->setAlignment(Qt::AlignLeft);
chart->legend()->setBackgroundVisible(false);
//创建QChartView对象,将QChart实例加入绘画视图
QChartView* chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
//显示
QMainWindow window;
window.setCentralWidget(chartView);
window.resize(700, 500);
window.show();
柱状图
//创建QBarSeries柱状图实例
QBarSeries *series=new QBarSeries();
//数据设置
QBarSet *set0=new QBarSet("张三");
QBarSet *set1=new QBarSet("李四");
QBarSet *set2=new QBarSet("王五");
QBarSet *set3=new QBarSet("赵六");
*set0<<3000<<4000<<5000;
*set1<<3500<<3500<<3000;
*set2<<4000<<3000<<4000;
*set3<<2000<<4000<<4500;
series->append(set0);
series->append(set1);
series->append(set2);
series->append(set3);
//创建QChart实例,将series添加进去
QChart* chart = new QChart;
chart->setTitle("工资柱状统计表");
chart->addSeries(series);
//设置标题字体
QFont font = qApp->font();
font.setBold(true);
font.setPointSize(20);
chart->setTitleFont(font);
//图例
chart->legend()->setAlignment(Qt::AlignLeft);
chart->legend()->setBackgroundVisible(false);
//设置坐标轴
QStringList categories;
categories << "month1" << "month2" << "month3";
QBarCategoryAxis *axisX = new QBarCategoryAxis();//初始化X轴
axisX->append(categories);
chart->addAxis(axisX, Qt::AlignBottom);
series->attachAxis(axisX);
QValueAxis *axisY = new QValueAxis();//初始化Y轴
axisY->setRange(1000,6000);
chart->addAxis(axisY, Qt::AlignLeft);
series->attachAxis(axisY);
//创建QChartView对象,将QChart实例加入绘画视图
QChartView* chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
//显示
QMainWindow window;
window.setCentralWidget(chartView);
window.resize(700, 500);
window.show();
散点图
//创建QScatterSeries散点图实例
QScatterSeries *series1 = new QScatterSeries();
series1->setMarkerShape(QScatterSeries::MarkerShapeCircle); //圆样式
series1->setMarkerSize(15);//设置绘制的点的大小
QScatterSeries *series2 = new QScatterSeries();
series2->setMarkerShape(QScatterSeries::MarkerShapeTriangle); //三角形样式
series2->setMarkerSize(15);
for(int i = 0; i < 10; i++) // 随机添加10个任意点
{
int x=rand()%20;
int y1=2*x+rand()%10;
int y2=rand()%20+20-x;
series1->append(x,y1);
series2->append(x,y2);
}
series1->setName("Y1");
series2->setName("Y2");
//创建QChart实例,将series1和series2两个实例添加进去
QChart *chart = new QChart();
chart->addSeries(series1);
chart->addSeries(series2);
//设置标题字体
QFont font = qApp->font();
font.setBold(true);
font.setPointSize(20);
chart->setTitleFont(font);
chart->setTitle("散点图");
//图例
chart->legend()->setAlignment(Qt::AlignTop);
chart->legend()->setBackgroundVisible(false);
//设置坐标轴
//chart->createDefaultAxes();//默认坐标轴
QValueAxis *axisX=new QValueAxis();
QValueAxis *axisY=new QValueAxis();
chart->addAxis(axisX,Qt::AlignBottom);
chart->addAxis(axisY,Qt::AlignLeft);
axisX->setRange(0,20);
axisY->setRange(0,50);
series1->attachAxis(axisX);
series1->attachAxis(axisY);
//创建QChartView对象
QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
//显示
QMainWindow window;
window.setCentralWidget(chartView);
window.resize(600, 400);
window.show();