Qt QVBarModelMapper详解
1、概述
QVBarModelMapper 是 Qt Charts 模块中的一个类,用于在垂直条形图(QBarSeries)和数据模型(QAbstractItemModel)之间建立映射关系。它实现了数据模型与图表之间的双向数据同步,当模型中的数据发生变化时,图表会自动更新;反之,当图表数据通过交互修改时,模型也会相应更新。
QVBarModelMapper 特别适用于需要将数据源中的数据以垂直条形图形式可视化的场景,支持多组数据系列的展示,每组数据对应模型中的一列。
2、重要方法
QAbstractItemModel *model() const
:返回当前关联的数据模型void setModel(QAbstractItemModel *model)
:设置关联的数据模型QBarSeries *series() const
:返回当前关联的条形图系列void setSeries(QBarSeries *series)
:设置关联的条形图系列int firstBarSetColumn() const
:返回第一个数据集在模型中的列索引void setFirstBarSetColumn(int firstBarSetColumn)
:设置第一个数据集在模型中的列索引int lastBarSetColumn() const
:返回最后一个数据集在模型中的列索引void setLastBarSetColumn(int lastBarSetColumn)
:设置最后一个数据集在模型中的列索引int firstRow() const
:返回模型中映射的起始行索引void setFirstRow(int firstRow)
:设置模型中映射的起始行索引int rowCount() const
:返回映射的行数void setRowCount(int rowCount)
:设置映射的行数int categoryRow() const
:返回类别所在的行索引void setCategoryRow(int categoryRow)
:设置类别所在的行索引
3、信号
void modelReplaced()
:当数据模型被替换时触发void seriesReplaced()
:当条形图系列被替换时触发void firstBarSetColumnChanged()
:当第一个数据集列索引变化时触发void lastBarSetColumnChanged()
:当最后一个数据集列索引变化时触发void firstRowChanged()
:当起始行索引变化时触发void rowCountChanged()
:当映射的行数变化时触发void categoryRowChanged()
:当类别行索引变化时触发
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);// 创建主窗口QMainWindow window;window.setWindowTitle("QVBarModelMapper 示例");// 1. 创建数据模型QStandardItemModel model(5, 3); // 5行3列model.setHeaderData(0, Qt::Horizontal, "产品A");model.setHeaderData(1, Qt::Horizontal, "产品B");model.setHeaderData(2, Qt::Horizontal, "产品C");// 填充数据for (int row = 0; row < 5; ++row) {model.setData(model.index(row, 0), QVariant(rand() % 100));model.setData(model.index(row, 1), QVariant(rand() % 100));model.setData(model.index(row, 2), QVariant(rand() % 100));// 设置X轴类别(第一列作为类别名称)model.setData(model.index(row, 0), QVariant(QString("第%1季度").arg(row+1)), Qt::DisplayRole);}// 2. 创建条形图系列QBarSeries *series = new QBarSeries();// 3. 创建映射器,关联模型和图表QVBarModelMapper *mapper = new QVBarModelMapper();mapper->setModel(&model); // 设置数据模型mapper->setSeries(series); // 设置图表系列mapper->setFirstBarSetColumn(0); // 第一个数据集列索引mapper->setLastBarSetColumn(2); // 最后一个数据集列索引mapper->setFirstRow(0); // 起始行索引mapper->setRowCount(5); // 映射行数// 4. 创建图表和坐标轴QChart *chart = new QChart();chart->addSeries(series);chart->setTitle("产品季度销售数据");chart->setAnimationOptions(QChart::SeriesAnimations);// X轴QBarCategoryAxis *axisX = new QBarCategoryAxis();chart->addAxis(axisX, Qt::AlignBottom);series->attachAxis(axisX);// Y轴QValueAxis *axisY = new QValueAxis();axisY->setRange(0, 100);axisY->setTitleText("销售额");chart->addAxis(axisY, Qt::AlignLeft);series->attachAxis(axisY);// 5. 创建图表视图并显示QChartView *chartView = new QChartView(chart);chartView->setRenderHint(QPainter::Antialiasing);window.setCentralWidget(chartView);window.resize(800, 600);window.show();return a.exec();
}
觉得有帮助的话,打赏一下呗。。
需要商务合作(定制程序)的欢迎私信!!