QItemModelBarDataProxy 类

用于在 Q3DBars 中展示数据的项模型代理类。 更多信息...

头文件 #include <QItemModelBarDataProxy>
CMakefind_package(Qt6 REQUIRED COMPONENTS Graphs)
target_link_libraries(mytarget PRIVATE Qt6::Graphs)
qmakeQT += graphs
实例化自 ItemModelBarDataProxy
继承自 QBarDataProxy
状态技术预览

公共类型

枚举类型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)
虚函数~QItemModelBarDataProxy() override
boolautoColumnCategories() const
boolautoRowCategories() const
QStringListcolumnCategories() const
intcolumnCategoryIndex(const QString &category)
QStringcolumnRole() const
QRegularExpressioncolumnRolePattern() const
QStringcolumnRoleReplace() const
QAbstractItemModel *itemModel() const
QItemModelBarDataProxy::MultiMatchBehaviormultiMatchBehavior() const
voidremap(const QString &rowRole, const QString &columnRole, const QString &valueRole, const QString &rotationRole, const QStringList &rowCategories, const QStringList &columnCategories)
QStringrotationRole() const
QRegularExpressionrotationRolePattern() const
QStringrotationRoleReplace() const
QStringListrowCategories() const
introwCategoryIndex(const QString &category)
QStringrowRole() const
QRegularExpressionrowRolePattern() const
QStringrowRoleReplace() const
voidsetAutoColumnCategories(bool enable)
voidsetAutoRowCategories(bool enable)
voidsetColumnCategories(const QStringList &categories)
voidsetColumnRole(const QString &role)
voidsetColumnRolePattern(const QRegularExpression &pattern)
voidsetColumnRoleReplace(const QString &replace)
voidsetItemModel(QAbstractItemModel *itemModel)
voidsetMultiMatchBehavior(QItemModelBarDataProxy::MultiMatchBehavior behavior)
voidsetRotationRole(const QString &role)
voidsetRotationRolePattern(const QRegularExpression &pattern)
voidsetRotationRoleReplace(const QString &replace)
voidsetRowCategories(const QStringList &categories)
voidsetRowRole(const QString &role)
voidsetRowRolePattern(const QRegularExpression &pattern)
voidsetRowRoleReplace(const QString &replace)
voidsetUseModelCategories(bool enable)
voidsetValueRole(const QString &role)
voidsetValueRolePattern(const QRegularExpression &pattern)
voidsetValueRoleReplace(const QString &replace)
booluseModelCategories() const
QStringvalueRole() const
QRegularExpressionvalueRolePattern() const
QStringvalueRoleReplace() const

信号

voidautoColumnCategoriesChanged(bool enable)
voidautoRowCategoriesChanged(bool enable)
voidcolumnCategoriesChanged()
voidcolumnRoleChanged(const QString &role)
voidcolumnRolePatternChanged(const QRegularExpression &pattern)
voidcolumnRoleReplaceChanged(const QString &replace)
voiditemModelChanged(const QAbstractItemModel *itemModel)
voidmultiMatchBehaviorChanged(QItemModelBarDataProxy::MultiMatchBehavior behavior)
voidrotationRoleChanged(const QString &role)
voidrotationRolePatternChanged(const QRegularExpression &pattern)
voidrotationRoleReplaceChanged(const QString &replace)
voidrowCategoriesChanged()
voidrowRoleChanged(const QString &role)
voidrowRolePatternChanged(const QRegularExpression &pattern)
voidrowRoleReplaceChanged(const QString &replace)
voiduseModelCategoriesChanged(bool enable)
voidvalueRoleChanged(const QString &role)
voidvalueRolePatternChanged(const QRegularExpression &pattern)
voidvalueRoleReplaceChanged(const QString &replace)

详细描述

QItemModelBarDataProxy 允许您使用QAbstractItemModel 派生模型作为 Q3DBars 数据源。它使用定义的映射将模型中的数据映射到 Q3DBars 图形的行、列和值。

每当映射或模型更改时,数据都会异步解析。当数据已解析时,会发出 QBarDataProxy::arrayReset()。但是,当 useModelCategories 属性设置为 true 时,单个项目更改会同步解析,除非同一帧还包含导致整个模型解析的更改。

映射可以使用以下方式使用

  • 如果将 useModelCategories 属性设置为 true,则此代理会将 QAbstractItemModel 的行和列直接映射到 Q3DBars 的行和列,并默认使用返回的 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(const QRegularExpression &rx, const QString &after) 函数文档。请注意,使用正则表达式会影响性能,因此更高效的做法是利用不需要进行搜索和替换以获取所需值的项模型。

例如,有关如何结合使用搜索模式和角色,请参阅 简单柱状图

另请参阅Qt 图表与 3D 数据处理

成员类型文档

枚举类型 QItemModelBarDataProxy::MultiMatchBehavior

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

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

属性文档

autoColumnCategories : bool

此属性表示是否自动生成列类别。

设置为 true 时,映射会忽略任何明确设置的列类别并在解决模型的数据时用自动生成的类别覆盖它们。默认为 true

访问函数

boolautoColumnCategories() const
voidsetAutoColumnCategories(bool enable)

通知信号

voidautoColumnCategoriesChanged(bool enable)

autoRowCategories : bool

此属性表示是否自动生成行类别。

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

访问函数

boolautoRowCategories() const
voidsetAutoRowCategories(bool enable)

通知信号

voidautoRowCategoriesChanged(bool enable)

columnCategories : QStringList

该属性用于保存映射的列分类。

访问函数

QStringListcolumnCategories() const
voidsetColumnCategories(const QStringList &categories)

通知信号

voidcolumnCategoriesChanged()

columnRole : QString

该属性用于保存映射的列角色。

访问函数

QStringcolumnRole() const
voidsetColumnRole(const QString &role)

通知信号

voidcolumnRoleChanged(const QString &role)

columnRolePattern : QRegularExpression

该属性保存了在用作列分类之前,是否对列角色映射的值进行搜索和替换。

该属性指定了用于查找要替换的映射值部分的正则表达式,columnRoleReplace 属性包含替换字符串。这对于从项目模型的单个时间戳字段中解析行和列分类很有用。

访问函数

QRegularExpressioncolumnRolePattern() const
voidsetColumnRolePattern(const QRegularExpression &pattern)

通知信号

voidcolumnRolePatternChanged(const QRegularExpression &pattern)

另请参阅columnRolecolumnRoleReplace

columnRoleReplace : QString

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

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

访问函数

QStringcolumnRoleReplace() const
voidsetColumnRoleReplace(const QString &replace)

通知信号

voidcolumnRoleReplaceChanged(const QString &replace)

另请参阅columnRolecolumnRolePattern

itemModel : QAbstractItemModel*

该属性用于保存项目模型。

访问函数

QAbstractItemModel *itemModel() const
voidsetItemModel(QAbstractItemModel *itemModel)

通知信号

voiditemModelChanged(const QAbstractItemModel *itemModel)

multiMatchBehavior : QItemModelBarDataProxy::MultiMatchBehavior

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

默认为QItemModelBarDataProxy::MultiMatchBehavior::Last。所选行为会影响条形值和旋转。

例如,您可能有一个包含不规律间隔采样的时间戳数据的项模型,并希望使用条形图可视化每天数据项的总值。这可以通过指定行和列分类来实现,以便每个条形表示一天,并将多匹配行为设置为 QItemModelBarDataProxy::MultiMatchBehavior::Cumulative

访问函数

QItemModelBarDataProxy::MultiMatchBehaviormultiMatchBehavior() const
voidsetMultiMatchBehavior(QItemModelBarDataProxy::MultiMatchBehavior behavior)

通知信号

voidmultiMatchBehaviorChanged(QItemModelBarDataProxy::MultiMatchBehavior behavior)

rotationRole : QString

该属性用于保存映射的旋转角色。

访问函数

QStringrotationRole() const
voidsetRotationRole(const QString &role)

通知信号

voidrotationRoleChanged(const QString &role)

rotationRolePattern : QRegularExpression

该属性代表在用作条形旋转角度之前,是否在旋转角色映射的值上进行查找和替换。

该属性指定要查找要替换的映射值的正则表达式,而 rotationRoleReplace 属性包含替换字符串。

访问函数

QRegularExpressionrotationRolePattern() const
voidsetRotationRolePattern(const QRegularExpression &pattern)

通知信号

voidrotationRolePatternChanged(const QRegularExpression &pattern)

另请参阅rotationRolerotationRoleReplace.

rotationRoleReplace : QString

该属性代表与 rotationRolePattern 结合使用的替换内容。

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

访问函数

QStringrotationRoleReplace() const
voidsetRotationRoleReplace(const QString &replace)

通知信号

voidrotationRoleReplaceChanged(const QString &replace)

另请参阅rotationRolerotationRolePattern.

rowCategories : QStringList

该属性代表映射的行类别。

访问函数

QStringListrowCategories() const
voidsetRowCategories(const QStringList &categories)

通知信号

voidrowCategoriesChanged()

rowRole : QString

该属性代表映射的行角色。

访问函数

QStringrowRole() const
voidsetRowRole(const QString &role)

通知信号

voidrowRoleChanged(const QString &role)

rowRolePattern : QRegularExpression

该属性代表在使用行角色之前,是否对映射值进行查找和替换。

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

访问函数

QRegularExpressionrowRolePattern() const
voidsetRowRolePattern(const QRegularExpression &pattern)

通知信号

voidrowRolePatternChanged(const QRegularExpression &pattern)

另请参阅rowRolerowRoleReplace.

rowRoleReplace : QString

该属性代表与 rowRolePattern 结合使用的替换内容。

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

访问函数

QStringrowRoleReplace() const
voidsetRowRoleReplace(const QString &replace)

通知信号

voidrowRoleReplaceChanged(const QString &replace)

另请参阅rowRolerowRolePattern.

useModelCategories : bool

此属性指示是否为映射使用行和列角色和类别。

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

访问函数

booluseModelCategories() const
voidsetUseModelCategories(bool enable)

通知信号

voiduseModelCategoriesChanged(bool enable)

valueRole : QString

此属性保存映射的值角色。

访问函数

QStringvalueRole() const
voidsetValueRole(const QString &role)

通知信号

voidvalueRoleChanged(const QString &role)

valueRolePattern : QRegularExpression

此属性指示在用作条形值之前是否在通过值角色映射的值上执行搜索和替换。

该属性指定查找要替换的映射值部分的正则表达式,并且 valueRoleReplace 属性包含替换字符串。

访问函数

QRegularExpressionvalueRolePattern() const
voidsetValueRolePattern(const QRegularExpression &pattern)

通知信号

voidvalueRolePatternChanged(const QRegularExpression &pattern)

另请参阅valueRolevalueRoleReplace

valueRoleReplace : QString

此属性保存要与其 valueRolePattern 一起使用的替换内容。

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

访问函数

QStringvalueRoleReplace() const
voidsetValueRoleReplace(const QString &replace)

通知信号

voidvalueRoleReplaceChanged(const QString &replace)

另请参阅valueRolevalueRolePattern

成员函数文档

[明确构造函数] QItemModelBarDataProxy::QItemModelBarDataProxy(QObject *parent = nullptr)

使用可选的 parent 构造 QItemModelBarDataProxy。

[明确构造函数] QItemModelBarDataProxy::QItemModelBarDataProxy(QAbstractItemModel *itemModel, QObject *parent = nullptr)

使用 itemModel 和可选的 parent 构造 QItemModelBarDataProxy。代理不拥有 itemModel,因为通常项模型由其他控件所拥有。

[明确构造函数] QItemModelBarDataProxy::QItemModelBarDataProxy(QAbstractItemModel *itemModel, const QString &valueRole, QObject *parent = nullptr)

使用 itemModel 和可选的 parent 构造 QItemModelBarDataProxy。代理不拥有 itemModel,因为在通常情况下,项目模型由其他控件所有。值角色的设置是 valueRole。此构造函数旨在与数据已经在行和列中正确排序的模型一起使用,因此还设置useModelCategories 属性为 true。

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

使用 itemModel 和可选的 parent 构造 QItemModelBarDataProxy。代理不拥有 itemModel,因为在通常情况下,项目模型由其他控件所有。使用 rowRolecolumnRolevalueRole 来设置角色映射。

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

使用 itemModel 和可选的 parent 构造 QItemModelBarDataProxy。代理不拥有 itemModel,因为在通常情况下,项目模型由其他控件所有。使用 rowRolecolumnRolevalueRolerotationRole 来设置角色映射。

[显式] 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,因为在通常情况下,项目模型由其他控件所有。使用 rowRolecolumnRolevalueRole 来设置角色映射。行和列类别使用 rowCategoriescolumnCategories 设置。此构造函数还将 autoRowCategoriesautoColumnCategories 设置为 false。

[明确] 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,因为通常项目模型由其他控件拥有。使用rowRolecolumnRolevalueRolerotationRole设置角色映射。使用rowCategoriescolumnCategories设置行和列类别。此构造函数还将autoRowCategoriesautoColumnCategories设置为false。

[重写虚函数 noexcept] QItemModelBarDataProxy::~QItemModelBarDataProxy()

销毁 QItemModelBarDataProxy

[可调用] int 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)

rowRolecolumnRolevalueRolerotationRolerowCategoriescolumnCategories更改为映射。

[可调用] int QItemModelBarDataProxy::rowCategoryIndex(const QString &category)

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

注意:如果您正在使用自动行类别生成,则在模型中的数据首次解决之前,此方法不会返回一个有效的索引。

注意:该函数可以通过元对象系统从QML调用。有关更多信息,请参阅Q_INVOKABLE

void QItemModelBarDataProxy::setItemModel(QAbstractItemModel *itemModel)

将项目模型设置为itemModel。不拥有模型,但连接到它以侦听更改。

注意:属性 itemModel 的设置函数。

另请参阅:itemModel

© 2024 Qt 公司。本文件中的文档贡献归各自所有者所有。本文件中的文档是根据自由软件基金会发布的 GNU 自由文档许可证版本 1.3 许可的。Qt 及相关商标是芬兰及/或其他国家/地区 Qt 公司的商标。所有其他商标均为其各自所有者的财产。