本页内容

QItemModelBarDataProxy Class

用于在项模型中通过Q3DBarsWidgetItem 呈现数据的代理类。更多内容...

头文件: #include <QItemModelBarDataProxy>
CMake: find_package(Qt6 REQUIRED COMPONENTS Graphs)
target_link_libraries(mytarget PRIVATE Qt6::Graphs)
qmake: QT += graphs
在 QML 中: ItemModelBarDataProxy
继承自: QBarDataProxy

公共类型

enum class MultiMatchBehavior { First, Last, Average, Cumulative }

属性

公共函数

QItemModelBarDataProxy(QObject *parent = nullptr)
QItemModelBarDataProxy(QAbstractItemModel *itemModel, QObject *parent = nullptr)
QItemModelBarDataProxy(QAbstractItemModel *itemModel, const QString &valueRole, QObject *parent = nullptr)
QItemModelBarDataProxy(QAbstractItemModel *itemModel, const QString &rowRole, const QString &columnRole, const QString &valueRole, QObject *parent = nullptr)
QItemModelBarDataProxy(QAbstractItemModel *itemModel, const QString &rowRole, const QString &columnRole, const QString &valueRole, const QString &rotationRole, QObject *parent = nullptr)
QItemModelBarDataProxy(QAbstractItemModel *itemModel, const QString &rowRole, const QString &columnRole, const QString &valueRole, const QStringList &rowCategories, const QStringList &columnCategories, QObject *parent = nullptr)
QItemModelBarDataProxy(QAbstractItemModel *itemModel, const QString &rowRole, const QString &columnRole, const QString &valueRole, const QString &rotationRole, const QStringList &rowCategories, const QStringList &columnCategories, QObject *parent = nullptr)
virtual ~QItemModelBarDataProxy() override
bool autoColumnCategories() const
bool autoRowCategories() const
QStringList columnCategories() const
qsizetype columnCategoryIndex(const QString &category)
QString columnRole() const
QRegularExpression columnRolePattern() const
QString columnRoleReplace() const
QAbstractItemModel *itemModel() const
QItemModelBarDataProxy::MultiMatchBehavior multiMatchBehavior() const
void remap(const QString &rowRole, const QString &columnRole, const QString &valueRole, const QString &rotationRole, const QStringList &rowCategories, const QStringList &columnCategories)
QString rotationRole() const
QRegularExpression rotationRolePattern() const
QString rotationRoleReplace() const
QStringList rowCategories() const
qsizetype rowCategoryIndex(const QString &category)
QString rowRole() const
QRegularExpression rowRolePattern() const
QString rowRoleReplace() const
void setAutoColumnCategories(bool enable)
void setAutoRowCategories(bool enable)
void setColumnCategories(const QStringList &categories)
void setColumnRole(const QString &role)
void setColumnRolePattern(const QRegularExpression &pattern)
void setColumnRoleReplace(const QString &replace)
void setItemModel(QAbstractItemModel *itemModel)
void setMultiMatchBehavior(QItemModelBarDataProxy::MultiMatchBehavior behavior)
void setRotationRole(const QString &role)
void setRotationRolePattern(const QRegularExpression &pattern)
void setRotationRoleReplace(const QString &replace)
void setRowCategories(const QStringList &categories)
void setRowRole(const QString &role)
void setRowRolePattern(const QRegularExpression &pattern)
void setRowRoleReplace(const QString &replace)
void setUseModelCategories(bool enable)
void setValueRole(const QString &role)
void setValueRolePattern(const QRegularExpression &pattern)
void setValueRoleReplace(const QString &replace)
bool useModelCategories() const
QString valueRole() const
QRegularExpression valueRolePattern() const
QString valueRoleReplace() const

信号

void autoColumnCategoriesChanged(bool enable)
void autoRowCategoriesChanged(bool enable)
void columnCategoriesChanged()
void columnRoleChanged(const QString &role)
void columnRolePatternChanged(const QRegularExpression &pattern)
void columnRoleReplaceChanged(const QString &replace)
void itemModelChanged(const QAbstractItemModel *itemModel)
void multiMatchBehaviorChanged(QItemModelBarDataProxy::MultiMatchBehavior behavior)
void rotationRoleChanged(const QString &role)
void rotationRolePatternChanged(const QRegularExpression &pattern)
void rotationRoleReplaceChanged(const QString &replace)
void rowCategoriesChanged()
void rowRoleChanged(const QString &role)
void rowRolePatternChanged(const QRegularExpression &pattern)
void rowRoleReplaceChanged(const QString &replace)
void useModelCategoriesChanged(bool enable)
void valueRoleChanged(const QString &role)
void valueRolePatternChanged(const QRegularExpression &pattern)
void valueRoleReplaceChanged(const QString &replace)

详细说明

QItemModelBarDataProxy 允许您将继承自QAbstractItemModel 的模型用作Q3DBarsWidgetItem 的数据源。它利用已定义的映射关系,将模型中的数据映射到Q3DBarsWidgetItem 图的行、列和值上。

每当映射关系或模型发生变化时,数据都会异步解析。当数据解析完成后,会触发QBarDataProxy::arrayReset()事件。但是,当useModelCategories 属性设置为true时,单个项的更改将同步解析,除非同一帧中还包含会导致整个模型被解析的更改。

映射可通过以下方式使用:

  • 如果将useModelCategories 属性设置为 true,该代理将把QAbstractItemModel 的行和列直接映射到Q3DBarsWidgetItem 的行和列,并默认将Qt::DisplayRole 返回的值用作条形值。如果Qt::DisplayRole 不合适,可以重新定义要使用的值角色。
  • 对于数据尚未按行和列整齐排序的模型(例如基于QAbstractListModel 的模型),您可以定义一个角色,用于将模型中的每个行、列和值进行映射。
  • 如果您不想包含模型中的所有数据,或者自动生成的行和列的顺序不符合您的期望,可以通过为行和/或列显式定义类别列表,来指定应包含哪些行和列以及它们的顺序。

例如,假设您有一个自定义的QAbstractItemModel ,用于存储与业务相关的各种月度数据。模型中的每个项目都有“年”、“月”、“收入”和“支出”这四个角色。您可以按照以下步骤将数据显示为条形图:

// By defining row and column categories, you tell the mapping which row and column each item
// belongs to. The categories must match the data stored in the model in the roles you define
// for row and column mapping. In this example we expect "year" role to return four digit year
// and "month" to return three letter designation for the month.
//
// An example of an item in model would be:
// Requested role -> Returned data
// "year" -> "2016" // Matches the first row category, so this item is added to the first row.
// "month" -> "jan" // Matches the first column category, so this item is added as first item in the row.
// "income" -> "12.1"
// "expenses" -> "9.2"
QStringList years;
QStringList months;
years << "2016" << "2017" << "2018" << "2019" << "2020" << "2021" << "2022";
months << "jan" << "feb" << "mar" << "apr" << "may" << "jun" << "jul" << "aug" << "sep" << "oct" << "nov" << "dec";

QItemModelBarDataProxy *proxy = new QItemModelBarDataProxy(customModel,
                                                           QStringLiteral("year"), // Row role
                                                           QStringLiteral("month"), // Column role
                                                           QStringLiteral("income"), // Value role
                                                           years, // Row categories
                                                           months); // Column categories

//...

// To display different data later, you can simply change the mapping.
proxy->setValueRole(QStringLiteral("expenses"));

如果模型的字段中数据格式与您的需求不完全一致,您可以为每个角色指定一个搜索模式正则表达式和一条替换规则,以将值转换为您所需的格式。 有关使用正则表达式进行替换的工作原理的更多信息,请参阅QString::replace (constQRegularExpression &rx, constQString &after)函数文档。请注意,使用正则表达式会影响性能,因此,在无需通过搜索和替换即可获得所需值的情况下,使用项目模型会更高效。

关于如何将搜索模式与角色结合使用的示例,请参阅《简单的柱状图》。

另请参阅 《Qt Graphs :3D 数据处理》。

成员类型文档

enum class QItemModelBarDataProxy::MultiMatchBehavior

QItemModelBarDataProxy::multiMatchBehavior 属性的行为类型。

常量值描述
QItemModelBarDataProxy::MultiMatchBehavior::First0该值取自项目模型中与每行/列组合相匹配的第一个项目。
QItemModelBarDataProxy::MultiMatchBehavior::Last1该值取自项目模型中与每行/列组合匹配的最后一项。
QItemModelBarDataProxy::MultiMatchBehavior::Average2将匹配每行/列组合的所有项目的值求平均,并将平均值用作条形图的值。
QItemModelBarDataProxy::MultiMatchBehavior::Cumulative3将匹配每个行/列组合的所有项目的值相加,并将总和用作条形图的值。

属性文档

autoColumnCategories : bool

该属性决定是否自动生成列类别。

当设置为“true ”时,映射会忽略任何显式设置的列类别,并在解析模型数据时用自动生成的列类别覆盖它们。默认值为“true ”。

访问函数:

bool autoColumnCategories() const
void setAutoColumnCategories(bool enable)

通知信号:

void autoColumnCategoriesChanged(bool enable)

autoRowCategories : bool

此属性决定行类别是否自动生成。

当设置为true 时,映射会忽略任何显式设置的行类别,并在每次解析模型数据时,用自动生成的行类别覆盖它们。默认值为true 。

访问函数:

bool autoRowCategories() const
void setAutoRowCategories(bool enable)

通知信号:

void autoRowCategoriesChanged(bool enable)

columnCategories : QStringList

该属性存储映射的列类别。

访问函数:

QStringList columnCategories() const
void setColumnCategories(const QStringList &categories)

通知信号:

void columnCategoriesChanged()

columnRole : QString

该属性用于指定映射中的列角色。

访问函数:

QString columnRole() const
void setColumnRole(const QString &role)

通知器信号:

void columnRoleChanged(const QString &role)

columnRolePattern : QRegularExpression

该属性用于指定在将列角色映射的值用作列类别之前,是否对其进行搜索和替换操作。

该属性指定用于查找映射值中待替换部分的正则表达式,而columnRoleReplace 属性则包含替换字符串。例如,在从项目模型中的单个时间戳字段解析行和列类别时,此功能非常有用。

访问函数:

QRegularExpression columnRolePattern() const
void setColumnRolePattern(const QRegularExpression &pattern)

通知信号:

void columnRolePatternChanged(const QRegularExpression &pattern)

另请参阅 columnRole 和columnRoleReplace 。

columnRoleReplace : QString

该属性存储与columnRolePattern 配合使用的替换内容。

默认值为空字符串。有关使用正则表达式进行搜索和替换的工作原理的更多信息,请参阅QString::replace(constQRegularExpression &rx, constQString &after) 函数的文档。

访问函数:

QString columnRoleReplace() const
void setColumnRoleReplace(const QString &replace)

通知信号:

void columnRoleReplaceChanged(const QString &replace)

另请参阅 columnRole 和columnRolePattern 。

itemModel : QAbstractItemModel*

该属性存储项目模型。

访问函数:

QAbstractItemModel *itemModel() const
void setItemModel(QAbstractItemModel *itemModel)

通知器信号:

void itemModelChanged(const QAbstractItemModel *itemModel)

multiMatchBehavior : QItemModelBarDataProxy::MultiMatchBehavior

如何处理每行/列组合中的多个匹配项。

默认值为QItemModelBarDataProxy::MultiMatchBehavior::Last 。所选行为将同时影响条形图的数值和旋转角度。

例如,您可能有一个包含不规则间隔采集的带时间戳数据的项模型,并希望通过条形图可视化每天数据项的总值。可以通过指定行和列类别(使每个条形代表一天),并将 `multiMatchBehavior` 设置为 `QItemModelBarDataProxy::MultiMatchBehavior::Cumulative` 来实现。

访问函数:

QItemModelBarDataProxy::MultiMatchBehavior multiMatchBehavior() const
void setMultiMatchBehavior(QItemModelBarDataProxy::MultiMatchBehavior behavior)

通知器信号:

void multiMatchBehaviorChanged(QItemModelBarDataProxy::MultiMatchBehavior behavior)

rotationRole : QString

该属性负责映射的旋转操作。

访问函数:

QString rotationRole() const
void setRotationRole(const QString &role)

通知信号:

void rotationRoleChanged(const QString &role)

rotationRolePattern : QRegularExpression

该属性用于指定是否在将旋转角色映射的值用作条形旋转角度之前,对其进行搜索和替换操作。

该属性指定用于查找映射值中待替换部分的正则表达式,而rotationRoleReplace 属性则包含替换字符串。

访问函数:

QRegularExpression rotationRolePattern() const
void setRotationRolePattern(const QRegularExpression &pattern)

通知信号:

void rotationRolePatternChanged(const QRegularExpression &pattern)

另请参阅 rotationRole 和rotationRoleReplace 。

rotationRoleReplace : QString

该属性用于存储与rotationRolePattern 配合使用的替换内容。

默认值为空字符串。有关使用正则表达式进行搜索和替换的工作原理的更多信息,请参阅QString::replace(constQRegularExpression &rx, constQString &after) 函数文档。

访问函数:

QString rotationRoleReplace() const
void setRotationRoleReplace(const QString &replace)

通知信号:

void rotationRoleReplaceChanged(const QString &replace)

另请参阅 rotationRole 和rotationRolePattern 。

rowCategories : QStringList

该属性存储了映射的行类别。

访问函数:

QStringList rowCategories() const
void setRowCategories(const QStringList &categories)

通知信号:

void rowCategoriesChanged()

rowRole : QString

该属性在映射中担任行角色。

访问函数:

QString rowRole() const
void setRowRole(const QString &role)

通知器信号:

void rowRoleChanged(const QString &role)

rowRolePattern : QRegularExpression

该属性用于指定在将行角色映射的值用作行类别之前,是否对其进行搜索和替换操作。

该属性指定用于查找映射值中待替换部分的正则表达式,而rowRoleReplace 属性则包含替换字符串。例如,在从项目模型中的单个时间戳字段中解析行类别和列类别时,此功能非常有用。

访问函数:

QRegularExpression rowRolePattern() const
void setRowRolePattern(const QRegularExpression &pattern)

通知信号:

void rowRolePatternChanged(const QRegularExpression &pattern)

另请参阅 rowRole 和rowRoleReplace 。

rowRoleReplace : QString

该属性存储与rowRolePattern 配合使用的替换内容。

默认值为空字符串。有关使用正则表达式进行搜索和替换的工作原理的更多信息,请参阅QString::replace(constQRegularExpression &rx, constQString &after) 函数文档。

访问函数:

QString rowRoleReplace() const
void setRowRoleReplace(const QString &replace)

通知信号:

void rowRoleReplaceChanged(const QString &replace)

另请参阅 rowRole 和rowRolePattern 。

useModelCategories : bool

无论映射时是否使用行和列的角色及类别,此属性均有效。

当设置为true 时,映射将忽略行和列的角色及类别,转而使用模型中的行和列。默认值为false 。

访问函数:

bool useModelCategories() const
void setUseModelCategories(bool enable)

通知信号:

void useModelCategoriesChanged(bool enable)

valueRole : QString

该属性在映射中起“角色”作用。

访问函数:

QString valueRole() const
void setValueRole(const QString &role)

通知器信号:

void valueRoleChanged(const QString &role)

valueRolePattern : QRegularExpression

该属性用于指定在将“value”角色映射的值用作条形图值之前,是否对其进行搜索和替换操作。

该属性指定用于查找映射值中待替换部分的正则表达式,而valueRoleReplace 属性则包含替换字符串。

访问函数:

QRegularExpression valueRolePattern() const
void setValueRolePattern(const QRegularExpression &pattern)

通知信号:

void valueRolePatternChanged(const QRegularExpression &pattern)

另请参阅 valueRole 和valueRoleReplace 。

valueRoleReplace : QString

该属性存储将与valueRolePattern 配合使用的替换内容。

默认值为空字符串。有关使用正则表达式进行搜索和替换的更多信息,请参阅QString::replace(constQRegularExpression &rx, constQString &after) 函数文档。

访问函数:

QString valueRoleReplace() const
void setValueRoleReplace(const QString &replace)

通知信号:

void valueRoleReplaceChanged(const QString &replace)

另请参阅 valueRole 和valueRolePattern 。

成员函数文档

[explicit] QItemModelBarDataProxy::QItemModelBarDataProxy(QObject *parent = nullptr)

使用可选的parent 来构造QItemModelBarDataProxy。

[explicit] QItemModelBarDataProxy::QItemModelBarDataProxy(QAbstractItemModel *itemModel, QObject *parent = nullptr)

使用itemModel 以及可选的parent 来构建QItemModelBarDataProxy。该代理不会拥有itemModel 的所有权,因为通常项模型由其他控件拥有。

[explicit] QItemModelBarDataProxy::QItemModelBarDataProxy(QAbstractItemModel *itemModel, const QString &valueRole, QObject *parent = nullptr)

使用itemModel 以及可选的parent 来构造QItemModelBarDataProxy。该代理不会拥有itemModel ,因为通常项模型由其他控件拥有。其值角色被设置为valueRole 。该构造函数旨在与数据已按行和列正确排序的模型配合使用,因此它还将useModelCategories 属性设置为true。

[explicit] QItemModelBarDataProxy::QItemModelBarDataProxy(QAbstractItemModel *itemModel, const QString &rowRole, const QString &columnRole, const QString &valueRole, QObject *parent = nullptr)

使用itemModel 以及可选的parent 来构建QItemModelBarDataProxy。该代理不会拥有itemModel 的所有权,因为通常项模型由其他控件拥有。角色映射通过rowRole 、columnRole 和valueRole 进行设置。

[explicit] QItemModelBarDataProxy::QItemModelBarDataProxy(QAbstractItemModel *itemModel, const QString &rowRole, const QString &columnRole, const QString &valueRole, const QString &rotationRole, QObject *parent = nullptr)

使用itemModel 以及可选的parent 来构建QItemModelBarDataProxy。该代理不会获取itemModel 的所有权,因为通常项模型由其他控件拥有。角色映射通过rowRole 、columnRole 、valueRole 和rotationRole 进行设置。

[explicit] QItemModelBarDataProxy::QItemModelBarDataProxy(QAbstractItemModel *itemModel, const QString &rowRole, const QString &columnRole, const QString &valueRole, const QStringList &rowCategories, const QStringList &columnCategories, QObject *parent = nullptr)

使用itemModel 以及可选的parent 来构造QItemModelBarDataProxy。该代理不会拥有itemModel 的所有权,因为通常项模型由其他控件拥有。角色映射通过rowRole 、columnRole 和valueRole 进行设置。行和列类别分别通过rowCategories 和columnCategories 进行设置。此构造函数还会将autoRowCategories 和autoColumnCategories 设置为false。

[explicit] QItemModelBarDataProxy::QItemModelBarDataProxy(QAbstractItemModel *itemModel, const QString &rowRole, const QString &columnRole, const QString &valueRole, const QString &rotationRole, const QStringList &rowCategories, const QStringList &columnCategories, QObject *parent = nullptr)

使用itemModel 以及可选的parent 来构造QItemModelBarDataProxy。该代理不会拥有itemModel ,因为通常项模型由其他控件拥有。角色映射通过rowRole 、columnRole 、valueRole 和rotationRole 进行设置。行和列类别通过rowCategories 和columnCategories 进行设置。此构造函数还将autoRowCategories 和autoColumnCategories 设置为false。

[override virtual noexcept] QItemModelBarDataProxy::~QItemModelBarDataProxy()

销毁QItemModelBarDataProxy 。

[invokable] qsizetype QItemModelBarDataProxy::columnCategoryIndex(const QString &category)

返回指定category 在列类别列表中的索引。如果未找到该类别,则返回-1。

注意:如果 启用了自动生成列类别功能,在模型中的数据首次解析之前,此方法不会返回有效的索引。

注意: 可通过元对象系统和 QML 调用此 函数。参见Q_INVOKABLE 。

void QItemModelBarDataProxy::remap(const QString &rowRole, const QString &columnRole, const QString &valueRole, const QString &rotationRole, const QStringList &rowCategories, const QStringList &columnCategories)

将映射中的rowRole 、columnRole 、valueRole 、rotationRole 、rowCategories 和columnCategories 进行了修改。

[invokable] qsizetype QItemModelBarDataProxy::rowCategoryIndex(const QString &category)

返回指定category 在行类别列表中的索引。如果行类别列表为空,则返回-1。

注意:如果 启用了自动生成行类别功能,在模型中的数据首次解析之前,此方法不会返回有效的索引。

注意: 可以通过元对象系统和 QML 调用此 函数。请参阅Q_INVOKABLE 。

void QItemModelBarDataProxy::setItemModel(QAbstractItemModel *itemModel)

将项模型设置为itemModel 。不会获取该模型的所有权,但会与其建立连接以监听变化。

注意: 这是属性 `itemModel`的设置器 函数。

另请参阅 itemModel()。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.