qt QHPieModelMapper详解 - 实践

1. 概述

QHPieModelMapper是Qt Charts模块中用于饼图的水平模型映射器。它允许将QAbstractItemModel派生的模型作为数据源,将模型中的数据映射到QPieSeries中,从而使模型的每一列定义饼图的一个切片,每行则映射为切片的标签或值。通过QHPieModelMapper,可以方便地将模型数据与饼图系列同步,实现数据的可视化展示。

2. 重要方法

  • QHPieModelMapper(QObject *parent = nullptr),创建一个QHPieModelMapper对象,其父对象为parent
  • void setModel(QAbstractItemModel *model):设置映射器使用的模型。

  • QAbstractItemModel *model() const:返回当前使用的模型。

  • void setSeries(QPieSeries *series):设置映射器使用的饼图系列。

  • QPieSeries *series() const:返回当前使用的饼图系列。

  • void setColumnCount(int columnCount):设置映射到饼图系列的模型列数。

  • int columnCount() const:返回映射的列数。

  • void setFirstColumn(int firstColumn):设置包含第一个切片值的模型列。

  • int firstColumn() const:返回包含第一个切片值的模型列。

  • void setLabelsRow(int labelsRow):设置与饼图切片标签同步的模型行。

  • int labelsRow() const:返回与饼图切片标签同步的模型行。

  • void setValuesRow(int valuesRow):设置与饼图切片值同步的模型行。

  • int valuesRow() const:返回与饼图切片值同步的模型行。

3. 信号

  • columnCountChanged:当列数发生变化时发出。

  • firstColumnChanged:当第一列发生变化时发出。

  • labelsRowChanged:当标签行发生变化时发出。

  • modelReplaced:当映射器连接的模型发生变化时发出。

  • seriesReplaced:当映射器连接的系列发生变化时发出。

  • valuesRowChanged:当值行发生变化时发出。

4. cpp实例

#include
#include
#include
#include
#include
#include
#include
QT_CHARTS_USE_NAMESPACE
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建模型并添加数据
QStandardItemModel model(4, 2);
model.setHorizontalHeaderLabels({"Label", "Value"});
model.setItem(0, 0, new QStandardItem("Category A"));
model.setItem(0, 1, new QStandardItem("20"));
model.setItem(1, 0, new QStandardItem("Category B"));
model.setItem(1, 1, new QStandardItem("30"));
model.setItem(2, 0, new QStandardItem("Category C"));
model.setItem(2, 1, new QStandardItem("40"));
model.setItem(3, 0, new QStandardItem("Category D"));
model.setItem(3, 1, new QStandardItem("10"));
// 创建饼图系列
QPieSeries *series = new QPieSeries();
// 创建水平模型映射器
QHPieModelMapper *mapper = new QHPieModelMapper();
mapper->setModel(&model);
mapper->setSeries(series);
mapper->setFirstColumn(0);
mapper->setColumnCount(2);
mapper->setLabelsRow(0);
mapper->setValuesRow(1);
// 创建图表并添加系列
QChart *chart = new QChart();
chart->addSeries(series);
chart->setTitle("Pie Chart Example");
// 创建图表视图并显示
QChartView *chartView = new QChartView(chart);
chartView->setRenderHint(QPainter::Antialiasing);
chartView->resize(400, 300);
chartView->show();
return a.exec();
}

点击扫码加入群聊

觉得有帮助的话,打赏一下呗。。

需要商务合作(定制程序)的欢迎私信!!

posted @ 2025-09-19 08:15  wzzkaifa  阅读(7)  评论(0)    收藏  举报