QtCharts 饼图的基本用法

您所在的位置:网站首页 cdr怎么画饼状图 QtCharts 饼图的基本用法

QtCharts 饼图的基本用法

2024-06-30 02:40| 来源: 网络整理| 查看: 265

 简述

        Qt饼图由定义为QPieSlice对象的扇形切片组成。本文主要是介绍如何使用饼图展现统计数据。

构建饼图所需的对象

        从外层到内依次需要:QChartView、QChart、QPieSeries、QPieSlice。

QChartView:提供一个独立的界面用来展示Charts,不需要额外的绘画场景。 QChart:管理图表系列、图例和坐标轴等。可以设置整体的主题、动画属性、统计图形的增删、缩放、标题等。QPieSeries:由定义为QPieSlice对象的切片组成。可以设置圆孔的大小、设置所有标签的位置(扇形内部、外部等,并不能指定坐标)、起始角度、结束角度、饼图位置(上、下、左、右、居中)等。QPieSlice:具体的某一扇形切片。可以设置扇形的外观、标签、数据、起始角度、可分离等属性。

饼图示例

        在pro中加入charts模块后,头文件如下:

#ifndef MAINWINDOW_H #define MAINWINDOW_H #include #include QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); void initChart(); private slots: //点击 void onPieSeriesClicked(QPieSlice*); private: Ui::MainWindow *ui; //饼状图 QPieSeries *pie_series; }; #endif // MAINWINDOW_H

        cpp文件如下:

#include "mainwindow.h" #include "ui_mainwindow.h" #include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); initChart(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::initChart() { //饼状图 pie_series = new QPieSeries(this); connect(pie_series, SIGNAL(clicked(QPieSlice*)), this, SLOT(onPieSeriesClicked(QPieSlice*))); //定义各扇形切片的颜色 static const QStringList list_pie_color = { "#6480D6","#A1DC85","#FFAD25","#FF7777","#84D1EF","#4CB383", }; //设置数据 QList list_data = {3.1, 3.2, 3.3, 3.4, 3.5, 3.6}; //扇形 for (int i = 0; i < list_pie_color.size(); i++) { QPieSlice* pie_slice = new QPieSlice(this); pie_slice->setLabelVisible(true); pie_slice->setValue(list_data[i]); pie_slice->setLabel(QString::number(list_data[i])); pie_slice->setColor(list_pie_color[i]); pie_slice->setLabelColor(list_pie_color[i]); pie_slice->setBorderColor(list_pie_color[i]); pie_series->append(pie_slice); } //图表视图 QChart* chart = new QChart; chart->setTitle("XXX统计饼图"); //设置暗黑主题 chart->setTheme(QChart::ChartThemeDark); //标题字体 QFont font = qApp->font(); font.setBold(true); font.setPointSize(16); chart->setTitleFont(font); //加入饼图 chart->addSeries(pie_series); chart->setAnimationOptions(QChart::SeriesAnimations); //图例 chart->legend()->setAlignment(Qt::AlignBottom); chart->legend()->setBackgroundVisible(false); //加入绘画视图 QChartView* chartView = new QChartView(this); chartView->setRenderHint(QPainter::Antialiasing); chartView->setChart(chart); //加入布局 QVBoxLayout* layout = new QVBoxLayout; layout->setContentsMargins(0, 0, 0, 0); layout->addWidget(chartView); ui->centralwidget->setLayout(layout); } //点击饼图 void MainWindow::onPieSeriesClicked(QPieSlice* slice) { slice->setExploded(!slice->isExploded()); }

运行结果

更改图例标签

        图例标签显示的文本是扇形切片所设置的。如果要将图例标签改为其它的文本,应该怎么做呢?

        在图例设置下加入以下代码,可以使得饼图在设置数据、标签的时候,不会让图例的标签发生变化。

for (int i = 0; i < list_pie_color.size(); i++) { chart->legend()->markers(pie_series)[i]->setLabel("统计项" + QString::number(i+1)); } 编译运行 

        



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3