《Q开发》 基于QtCharts的柱形图绘制

本程序包含的内容如下:

  1. 通过伪随机函数产生随机数,填充表格
  2. 同时用产生的随机数绘制柱状图
  3. 每组包含多个柱状图

效果图如下:

常用类汇总

QBarSet:用于创建柱状图的数据集

QBarSeries:柱状图序列,一个柱状图序列一般包含多个QBarSet数据集

QBarCategoryAxis:柱状图分类坐标,以文字标签形式表示的坐标

QBarSet类的主要函数

分组

函数

功能描述

标签

void setLabel()

设置数据集的标签,用于图例显示的文字

void setLabelBrush()

设置标签的画刷

void setLabelColor()

设置标签的文字颜色

void setLabelFont()

设置标签的字体

数据棒/柱子

void setBorderColor()

设置数据集棒图的边框颜色

void setBrush()

设置数据集棒图的画刷

void setColor()

设置数据集的棒图填充颜色

void senPen()

设置数据集棒图的边框画笔

数据点

void append()

添加一个数据到数据集

void insert()

在某个位置插入一个数据到数据集

void remove()

从某个位置开始删除一定数量的数据

void replace()

替换某个位置的数据

qreal at()

返回某个位置的数据

int count()

返回数据的个数

qreal sum()

返回数据集内所有数据的和

QBarSeries类的主要函数

分组

函数

功能描述

外观

void setBarWidth()

设置数据棒的宽度

void setLabelsVisible()

设置数据棒的标签可见性

void setLabelFormat()

设置数据棒标签的格式,只支持一种:@value

void setLabelAngle()

设置标签角度

数据集

bool append()

添加一个QBarSet数据集到序列

bool insert()

在某个位置插入一个数据集到序列

bool remove()

移除一个数据集,解除所属关系,并删除数据集对象

bool take()

移除一个数据集,但不删除数据集对象

void clear()

清除全部数据集,并删除数据集对象

QList<QBarSet *> barSets()

返回数据集对象的列表

int count()

返回数据集的个数

QBarCategoryAxis类的主要函数

分组

函数

功能描述

坐标

内容

void append()

添加一个类别到坐标轴

void insert()

在某个位置插入一个类别到坐标轴

void replace()

替换某个类别

void remove()

移除某个类别

void clear()

删除所有类别

QString at()

返回某个索引位置的类别文字

int count()

返回类别个数

void setCategories()

设置一个QStringList字符串列表作为坐标轴的类别文字,删除所有类别文字

坐标

范围

void setMin()

设置坐标轴最小值

void setMax()

设置坐标轴最大值

void setRange()

设置坐标轴范围

程序开发记录

1.工程创建完毕后,添加QtChart模块。Release模式下,项目——属性,添加如下

Debug模式下,也需要添加如上两个内容,第二个图中的库修改为Qt5Chartsd.lib

2.布局如下

3.在头文件中添加引用

#include <QtCharts>

添加如下变量和函数

QChartView *GPSview;               //绘图区域的容器

QChart *chartGPS;                     //绘图区域

QValueAxis *yAxisGPS;              //纵轴

QBarCategoryAxis *xAxisGPS;   //横轴

QStringList categoriesGPS;         //柱状图分类坐标,以文字标签形式表示的坐标

QBarSet *GPS_L1, *GPS_L2, *GPS_L5; //GPS系统对应的载造比

QBarSeries *seriesGPS;                          //序列  

void InitTableWidget();

void InitBarSet(QBarSet *set1, QBarSet *set2, QBarSet *set3);

void InitBarSeries(QBarSeries *barSeries);

void InitAxis();

void InitChart(QChart *chart);

void InitChartView(QChartView *chartView, QWidget *widget);

void Init();

void ClearData();

public slots:

    void on_pBtnRandom_clicked();

在源文件中添加如下函数

void BarChartEg::Init()

{

    InitTableWidget();

//1.准备QChartView对象,用来显示chart

GPSview = new QChartView(ui.widget);  

InitChartView(GPSview, ui.widget);

//2.准备QChart对象,用来绘图

chartGPS = new QChart();

InitChart(chartGPS);

//3.将chart添加到chartView上

GPSview->setChart(chartGPS);

//4.设置坐标轴

InitAxis();

//5.准备barSeries柱状图序列,包含数据集

seriesGPS = new QBarSeries(this);

InitBarSeries(seriesGPS);

//6.准备barSet数据集,创建柱形图

GPS_L1 = new QBarSet("CNR1");

GPS_L2 = new QBarSet("CNR2");

GPS_L5 = new QBarSet("CNR3");

InitBarSet(GPS_L1, GPS_L2, GPS_L5);

//7.为序列barSeries添加数据集barSet

QList<QBarSet *> barSetList_GPS;

barSetList_GPS << GPS_L1 << GPS_L2 << GPS_L5;

seriesGPS->append(barSetList_GPS);

//8.将序列barSeries添加到chart上

chartGPS->addSeries(seriesGPS);

//9.将坐标轴添加到chart上,并指定序列

chartGPS->setAxisX(xAxisGPS, seriesGPS);

chartGPS->setAxisY(yAxisGPS, seriesGPS);

}

void BarChartEg::InitTableWidget()

{

ui.tableWidget->setRowCount(rows);

ui.tableWidget->setColumnCount(cols);

QStringList headerList;

headerList << "CNR1" << "CNR2" << "CNR3";

ui.tableWidget->setHorizontalHeaderLabels(headerList);

}

//设置QChartView布局

void BarChartEg::InitChartView(QChartView *chartView, QWidget *widget)

{

chartView->setBackgroundBrush(QBrush(Qt::white));

QHBoxLayout *hLayout = new QHBoxLayout;

hLayout->setContentsMargins(0, 0, 0, 0);

hLayout->addWidget(chartView);

widget->setLayout(hLayout);

}

void BarChartEg::InitChart(QChart *chart)

{

chart->layout()->setContentsMargins(5, 0, 5, 5);

chart->setMargins(QMargins(1, 0, 1, 1));

chart->setBackgroundRoundness(0);

}

void BarChartEg::InitBarSet(QBarSet *set1, QBarSet *set2, QBarSet *set3)

{

//设置数据集标签字体

QFont font("宋体", 8, 0); 

font.setBold(true);

set1->setLabelFont(font);

set2->setLabelFont(font);

set3->setLabelFont(font);

//设置数据集标签颜色

set1->setLabelColor(QColor(0,0,0));

set2->setLabelColor(QColor(0, 0, 0));

set3->setLabelColor(QColor(0, 0, 0));

}

void BarChartEg::InitBarSeries(QBarSeries *barSeries)

{

barSeries->setLabelsFormat("@value");

//barSeries->setLabelsPosition(QAbstractBarSeries::LabelsCenter);//设置在柱形图内中间

//barSeries->setLabelsPosition(QAbstractBarSeries::LabelsInsideEnd);//设置在柱形图内部顶端

//barSeries->setLabelsPosition(QAbstractBarSeries::LabelsInsideBase);//设置在柱形图内部下端

barSeries->setLabelsPosition(QAbstractBarSeries::LabelsOutsideEnd);//设置在柱形图外部上端

barSeries->setLabelsVisible(true);

barSeries->setBarWidth(0.5);

}

void BarChartEg::InitAxis()

{

xAxisGPS = new QBarCategoryAxis(this);

xAxisGPS->setGridLineVisible(false);

yAxisGPS = new QValueAxis(this);

yAxisGPS->setRange(0, 60);

}

void BarChartEg::on_pBtnRandom_clicked()

{

ClearData();

qsrand(QTime::currentTime().second()); //随机数种子

for (int i = 0; i < rows; i++)

{

     for (int j = 0; j < cols; j++)

     {

         double randomData = 30 + (qrand() % 30);  //随机数

         ui.tableWidget->setItem(i,j,new QTableWidgetItem(QString::asprintf("%.0f",randomData)));

        

         if (j == 0)

             GPS_L1->append(randomData);

         if (j == 1)

             GPS_L2->append(randomData);

         if (j == 2)

             GPS_L5->append(randomData);

     }

     categoriesGPS.append("序列"+QString::number(i+1));

}

xAxisGPS->setCategories(categoriesGPS);

}

void BarChartEg::ClearData()

{

xAxisGPS->clear();

categoriesGPS.clear();

GPS_L1->remove(0, 4);

GPS_L2->remove(0, 4);

GPS_L5->remove(0, 4);

}

  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不相信眼泪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值