QItemModelBarDataProxy 类
用于在 Q3DBars 中展示数据的项模型代理类。 更多信息...
头文件 | #include <QItemModelBarDataProxy> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Graphs) target_link_libraries(mytarget PRIVATE Qt6::Graphs) |
qmake | QT += graphs |
实例化自 | ItemModelBarDataProxy |
继承自 | QBarDataProxy |
状态 | 技术预览 |
- 所有成员的列表,包括继承成员
- QItemModelBarDataProxy 是 Qt Graphs C++ 类库的一部分,专为 3D 设计。 更多信息...
公共类型
枚举类型 | 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 |
bool | autoColumnCategories() const |
bool | autoRowCategories() const |
QStringList | columnCategories() const |
int | 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 |
int | 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 派生模型作为 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::First | 0 | 从与每一行/列组合匹配的项模型中第一个匹配的项中获取值。 |
QItemModelBarDataProxy::MultiMatchBehavior::Last | 1 | 从与每一行/列组合匹配的项模型中最后一个匹配的项中获取值。 |
QItemModelBarDataProxy::MultiMatchBehavior::Average | 2 | 将所有与每一行/列组合匹配的项的值求平均值,将平均值用作柱形图的值。 |
QItemModelBarDataProxy::MultiMatchBehavior::Cumulative | 3 | 将所有与每一行/列组合匹配的项的值相加,并将总和用作柱形图的值。 |
属性文档
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(const QRegularExpression &rx, const QString &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。所选行为会影响条形值和旋转。
例如,您可能有一个包含不规律间隔采样的时间戳数据的项模型,并希望使用条形图可视化每天数据项的总值。这可以通过指定行和列分类来实现,以便每个条形表示一天,并将多匹配行为设置为 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(const QRegularExpression &rx, const QString &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(const QRegularExpression &rx, const QString &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
此属性指示在用作条形值之前是否在通过值角色映射的值上执行搜索和替换。
该属性指定查找要替换的映射值部分的正则表达式,并且 valueRoleReplace 属性包含替换字符串。
访问函数
QRegularExpression | valueRolePattern() const |
void | setValueRolePattern(const QRegularExpression &pattern) |
通知信号
void | valueRolePatternChanged(const QRegularExpression &pattern) |
另请参阅valueRole 和 valueRoleReplace。
valueRoleReplace : QString
此属性保存要与其 valueRolePattern 一起使用的替换内容。
默认为空字符串。有关使用正则表达式进行搜索和替换的更多信息,请参阅 QString::replace(const QRegularExpression &rx, const QString &after) 函数文档。
访问函数
QString | valueRoleReplace() const |
void | setValueRoleReplace(const QString &replace) |
通知信号
void | valueRoleReplaceChanged(const QString &replace) |
另请参阅valueRole 和 valueRolePattern。
成员函数文档
[明确构造函数]
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,因为在通常情况下,项目模型由其他控件所有。使用 rowRole、columnRole 和 valueRole 来设置角色映射。
[显式]
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 来设置角色映射。
[显式]
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。
[明确]
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。
[重写虚函数 noexcept]
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)
将rowRole、columnRole、valueRole、rotationRole、rowCategories和columnCategories更改为映射。
[可调用]
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 公司的商标。所有其他商标均为其各自所有者的财产。