前言:
绘制饼图需要用到3个类
• QPieSeries: 用于创建有由一系列数据组成的饼图数据
• QChart: 图表界面,用来管理图表内容,颜色,大小等
• QChartView:负责显示QChart
mywidget.h:
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
#include <QtCharts/QChartGlobal>
#include <QtCharts/QChart>
#include <QtCharts/QChartView>
#include <QtWidgets/QWidget>
#include <QtWidgets/QGridLayout>
#include <QtCharts/QPieSeries>
QT_CHARTS_USE_NAMESPACE
class MyWidget : public QWidget
{
Q_OBJECT
public:
MyWidget(QWidget *parent = 0);
~MyWidget();
QPieSeries *pieseries;
QChart *m_chart;
QGridLayout *m_gridlaout;
QChartView *m_chartview;
};
#endif // MYWIDGET_H
mywidget.cpp:
#include "mywidget.h"
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)
{
m_chart = new QChart();
m_chartview = new QChartView(m_chart,this);
m_chartview->setRenderHint(QPainter::Antialiasing); //渲染
m_gridlaout = new QGridLayout();
m_gridlaout->addWidget(m_chartview,0,0,3,1);
setLayout(m_gridlaout);
resize(960, 720);
//添加series 可以修改颜色,比例等
pieseries = new QPieSeries();
pieseries->append("a",2);
pieseries->append("b",3);
pieseries->append("c",5);
//修改各个区域的颜色
pieseries->setLabelsVisible(true); //label就是延伸出来的那跟线条
pieseries->setUseOpenGL(true); //开启gpu绘图 gpu 图像处理器
pieseries->slices().at(0)->setColor(QColor(0,0,255)); //slices位类内部创建好了的list表,我们不需要再新建list表来存储sreies信息
pieseries->slices().at(1)->setColor(QColor(255,0,0)); //slices位类内部创建好了的list表,我们不需要再新建list表来存储sreies信息
pieseries->slices().at(2)->setColor(QColor(0,255,0)); //slices位类内部创建好了的list表,我们不需要再新建list表来存储sreies信息
pieseries->slices().at(0)->setLabelColor(QColor(13,128,217)); //设置延伸出来线条的颜色 不设置默认黑色
m_chart->addSeries(pieseries);
//修改说明样式
m_chart->legend()->setVisible(true);
m_chart->legend()->setAlignment(Qt::AlignBottom);
m_chart->legend()->setBackgroundVisible(true);//设置背景是否可视
m_chart->legend()->setAutoFillBackground(true);//设置背景自动填充
m_chart->legend()->setColor(QColor(222,233,251));//设置颜色
m_chart->legend()->setLabelColor(QColor(0,100,255));//设置标签颜色
m_chart->legend()->setMaximumHeight(50);
//设置标题title
m_chart->setTitleBrush(QBrush(QColor(0,0,255))); //设置颜色
m_chart->setTitleFont(QFont("微软黑体")); //设置字体
m_chart->setTitle("饼状图");
}
注意点:
1:QPieSlice *QPieSeries::append(QString label, qreal value) 函数重载
绘制饼状图时,需要绘制的对象都是一个系列series,使用apppend函数添加,第一个参数是series的名称,第二个参数是这个系列所占的比例大小float类型
2:在类QPieSeries
中已经有了一个定义好了的list表QList<QPieSlice *> slices() const;
,用来存储series对象,所以我们不用像在曲线图中一样 在外部定义一个list表来存储相关series 然后对齐赋值等操作 最后添加到chart中。既然这个类已经在内部封装好了这些东西 我们直接调用即可。
pieseries->slices().at(0)->setColor(QColor(0,0,255));
使用at()来询问slices表中的每一个series区域对象