@[TOC](Qt之饼图(Pie Graph))
饼图名为Pie Graph,用于显示一个数据系列中各项的大小与各项总和的比例。本文基于QtCharts实现饼图的显示。
1.实现过程
1.1环境配置
(1)首先想要使用QtCharts模块,需要在安装qt时选择勾选安装QtCharts;
(2)构建QtWidgets项目,在xx.pro项目文件中添加 Qt += charts;
(3)在头文件中添加如下代码:
#include <QtCharts/QChart>
#include <QtCharts/QPieSeries>
#include <QtCharts/QPieSlice>
QT_CHARTS_USE_NAMESPACE
(4)在xx.ui资源文件中,添加一个QWidget窗口控件并提升为QChartView类。
饼图显示
QChart *chart = new QChart();
chart->setAnimationOptions(QChart::SeriesAnimations);
ui->widget_bar->setChart(chart);
ui->widget_bar->setRenderHint(QPainter::Antialiasing);
chart = ui->widget_bar->chart(); //获取chart对象
chart->removeAllSeries(); //删除所有序列
ui->widget_bar->chart()->setTitle("");
//series->setHoleSize(ui->spinHoleSize->value()); //饼图中间空心的大小
m_series = new QPieSeries(); //创建饼图序列
m_series->clear();
QStringList list;
list<<"完成度"<<"符合度"<<"应用情况";
for (int i = 0; i < 3; i++) //添加分块数据
{
int data = 0;
if(i == 0)
data = 45;
else if(i == 1)
data = 30;
else
data = 25;
m_series->append(list[i], data);
}
m_series->setLabelsVisible(true); //只影响当前的slices,必须添加完slice之后再设置
ui->widget_bar->chart()->addSeries(m_series); //添加饼图序列
//饼图分块
QPieSlice *slice;
for (int i = 0; i < 3; i++)
{
slice = m_series->slices().at(i);
slice->setLabel(slice->label() + QString::asprintf(": %.0f, %.1f%%", //设置分块的标签
slice->value(), slice->percentage() * 100));
connect(slice, SIGNAL(hovered(bool)), this, SLOT(on_PieSliceHighlight(bool)));//信号与槽函数关联,鼠标落在某个分块上时,此分块弹出
}
ui->widget_bar->chart()->legend()->setVisible(true); //图例
ui->widget_bar->chart()->legend()->setAlignment(Qt::AlignRight); //Qt::AlignRight