Qt QVPieModelMapper详解
1、概述
QVPieModelMapper 是 Qt Charts 模块中的一个类,用于将数据模型(QAbstractItemModel)与饼图(QPieSeries)进行垂直方向的数据映射。它建立了模型数据与饼图扇区之间的关联,使得模型中的数据可以自动在饼图中可视化展示,并且支持数据的动态更新。
垂直映射意味着 QVPieModelMapper 会将模型中的每一行数据映射为饼图中的一个扇区,通常使用一列作为扇区的值,另一列作为扇区的标签。这种映射方式非常适合处理按类别组织的数据。
2、重要方法
QPieSeries *series() const
:返回当前关联的饼图系列void setSeries(QPieSeries *series)
:设置要关联的饼图系列QAbstractItemModel *model() const
:返回当前关联的数据模型void setModel(QAbstractItemModel *model)
:设置要关联的数据模型int valuesColumn() const
:返回用于扇区值的数据列索引void setValuesColumn(int column)
:设置用于扇区值的数据列索引int labelsColumn() const
:返回用于扇区标签的数据列索引void setLabelsColumn(int column)
:设置用于扇区标签的数据列索引int firstRow() const
:返回开始映射的数据行索引void setFirstRow(int row)
:设置开始映射的数据行索引int rowCount() const
:返回要映射的数据行数void setRowCount(int count)
:设置要映射的数据行数
3、信号
void seriesReplaced()
:当关联的饼图系列被替换时发射void modelReplaced()
:当关联的数据模型被替换时发射void valuesColumnChanged()
:当值列索引改变时发射void labelsColumnChanged()
:当标签列索引改变时发射void firstRowChanged()
:当起始行索引改变时发射void rowCountChanged()
:当映射的行数改变时发射
这些信号可以用于监测映射关系的变化,以便在界面中做出相应的更新。
4、C++ 实例
#include <QApplication>
#include <QtCharts/QChartView>
#include <QtCharts/QLineSeries>
#include <QtCharts/QValueAxis>
#include <QtCharts/QAreaSeries>
#include <QLegend>
#include <QPieSlice>QT_CHARTS_USE_NAMESPACEint main(int argc, char *argv[])
{QApplication a(argc, argv);// 1. 创建数据模型并添加数据QStandardItemModel model;// 设置列数:第一列是标签,第二列是值model.setColumnCount(2);// 添加数据行model.appendRow({new QStandardItem("苹果"), new QStandardItem("35")});model.appendRow({new QStandardItem("香蕉"), new QStandardItem("25")});model.appendRow({new QStandardItem("橙子"), new QStandardItem("20")});model.appendRow({new QStandardItem("葡萄"), new QStandardItem("15")});model.appendRow({new QStandardItem("其他"), new QStandardItem("5")});// 2. 创建饼图系列QPieSeries *series = new QPieSeries();series->setName("水果销量分布");// 3. 创建垂直映射器并建立关联QVPieModelMapper *mapper = new QVPieModelMapper();mapper->setModel(&model); // 设置数据模型mapper->setSeries(series); // 设置饼图系列mapper->setLabelsColumn(0); // 标签使用第0列mapper->setValuesColumn(1); // 值使用第1列mapper->setFirstRow(0); // 从第0行开始mapper->setRowCount(model.rowCount()); // 映射所有行// 4. 创建图表并添加系列QChart *chart = new QChart();chart->addSeries(series);chart->setTitle("水果销量占比图");chart->legend()->setAlignment(Qt::AlignRight);// 5. 创建图表视图并显示QChartView *chartView = new QChartView(chart);chartView->setRenderHint(QPainter::Antialiasing);chartView->resize(800, 600);chartView->show();return a.exec();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!