PySide6.QtCore.QModelRoleDataSpan

class QModelRoleDataSpan

QModelRoleDataSpan 类提供了对 QModelRoleData 对象的跨度。更多

概要

方法

注意

本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。

详细描述

警告

本节包含从C++自动翻译到Python的代码片段,可能包含错误。

一个QModelRoleDataSpan被用作对QModelRoleData对象数组的抽象。

与视图类似,QModelRoleDataSpan 提供了一个小对象(指针和大小),可以传递给需要检查数组内容的函数。QModelRoleDataSpan 可以从任何类似数组的序列(普通数组、QVector、std::vector、QVarLengthArray 等)构造。此外,它不拥有该序列,因此该序列必须比任何引用它的 QModelRoleDataSpan 对象存活得更久。

与视图不同,QModelRoleDataSpan 是一个跨度,因此它允许对底层元素进行修改。

QModelRoleDataSpan 的主要用途是使模型能够在一次调用中返回与不同角色对应的数据。

为了从模型中绘制一个元素,视图(通过其委托)通常会通过根据需要多次调用data()来请求同一索引的多个角色:

text = model.data(index, Qt.DisplayRole)
decoration = model.data(index, Qt.DecorationRole)
checkState = model.data(index, Qt.CheckStateRole)
# etc.

QModelRoleDataSpan 允许视图仅通过一次函数调用请求相同的数据。

这是通过让视图准备一个合适的QModelRoleData对象数组来实现的,每个对象都初始化为应获取的角色。然后,该数组被包装在一个QModelRoleDataSpan对象中,然后传递给模型的multiData()函数。

std.array<QModelRoleData, 3> roleData = { {
    QModelRoleData(Qt.DisplayRole),
    QModelRoleData(Qt.DecorationRole),
    QModelRoleData(Qt.CheckStateRole)
} }
# Usually, this is not necessary: A QModelRoleDataSpan
# will be built automatically for you when passing an array-like
# container to multiData().
span = QModelRoleDataSpan(roleData)
model.multiData(index, span)
# Use roleData[0].data(), roleData[1].data(), etc.

建议视图存储QModelRoleData对象的数组(可能还包括相应的span),并在后续调用模型时重复使用它。这可以减少与创建和返回QVariant对象相关的内存分配。

最后,给定一个QModelRoleDataSpan对象,模型的责任是填充与跨度中每个角色对应的数据。具体如何实现取决于具体的模型类。以下是一个可能的实现草图,它遍历跨度并在每个元素上使用setData()

def multiData(self, index, roleDataSpan):

    for roleData in roleDataSpan:
        role = roleData.role()
        # ... obtain the data for index and role ...
        roleData.setData(result)

另请参阅

multiData()

__init__()

构造一个空的QModelRoleDataSpan。它的data()将被设置为None,并且其长度为零。

__init__(modelRoleData)
Parameters:

modelRoleDataQModelRoleData

构造一个跨越modelRoleDataQModelRoleDataSpan,将其视为一个单元素数组。

__init__(modelRoleData, len)
Parameters:

构造一个跨越从modelRoleData开始且长度为len的数组的QModelRoleDataSpan

注意

只要此对象未被销毁,数组就必须保持活动状态。

__getitem__()
__len__()
begin()
Return type:

QModelRoleData

返回指向此对象表示的跨度开头的指针。

data()
Return type:

QModelRoleData

返回指向此对象表示的跨度开头的指针。

end()
Return type:

QModelRoleData

返回一个指向此对象表示的跨度末尾之后的虚构元素的指针。

length()
Return type:

整数

返回此对象表示的跨度的长度。

operator(index)
Parameters:

索引 – int

Return type:

QModelRoleData

返回对跨度中位置index处的QModelRoleData的可修改引用。

注意

index 必须是此范围的有效索引(0 <= index < size() )。

size()
Return type:

整数

返回此对象表示的跨度的长度。