PySide6.QtWidgets.QDataWidgetMapper¶
- class QDataWidgetMapper¶
QDataWidgetMapper类提供了数据模型的一部分与小部件之间的映射。更多…概要¶
属性¶
currentIndexᅟ- 当前行或列orientationᅟ- 模型的方向submitPolicyᅟ- 当前的提交策略
方法¶
def
__init__()def
addMapping()def
clearMapping()def
currentIndex()def
itemDelegate()def
mappedSection()def
mappedWidgetAt()def
model()def
orientation()def
removeMapping()def
rootIndex()def
setModel()def
setOrientation()def
setRootIndex()def
submitPolicy()
虚拟方法¶
插槽¶
信号¶
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
QDataWidgetMapper可用于通过将小部件映射到项目模型的部分来创建数据感知小部件。如果方向是水平的(默认),则部分是模型的一列,否则是一行。每当当前索引发生变化时,每个小部件都会通过其映射时指定的属性从模型中更新数据。如果用户编辑了小部件的内容,则使用相同的属性读取更改并将其写回模型。默认情况下,每个小部件的用户属性用于在模型和小部件之间传输数据。自Qt 4.3以来,额外的
addMapping()函数允许使用命名属性代替默认的用户属性。可以设置一个项目委托来支持自定义小部件。默认情况下,使用
QStyledItemDelegate来同步模型与小部件。让我们假设我们有一个名为
model的项目模型,其内容如下:1
Qt 挪威
奥斯陆
2
Qt 澳大利亚
布里斯班
3
Qt 美国
帕洛阿尔托
4
Qt 中国
北京
5
Qt 德国
柏林
以下代码将模型的列映射到名为
mySpinBox、myLineEdit和myCountryChooser的小部件:mapper = QDataWidgetMapper() mapper.setModel(model) mapper.addMapping(mySpinBox, 0) mapper.addMapping(myLineEdit, 1) mapper.addMapping(myCountryChooser, 2) mapper.toFirst()
在调用
toFirst()之后,mySpinBox显示值1,myLineEdit显示Qt Norway,myCountryChooser显示Oslo。导航函数toFirst()、toNext()、toPrevious()、toLast()和setCurrentIndex()可用于在模型中导航并使用模型中的内容更新小部件。setRootIndex()函数允许将模型中的特定项指定为根索引 - 该项目的子项将映射到用户界面中的相关小部件。QDataWidgetMapper支持两种提交策略,AutoSubmit和ManualSubmit。AutoSubmit会在当前小部件失去焦点时立即更新模型,而ManualSubmit则不会更新模型,除非调用submit()。ManualSubmit在显示允许用户取消所有修改的对话框时非常有用。此外,其他显示模型的视图在用户完成所有修改并提交之前不会更新。请注意,
QDataWidgetMapper会跟踪外部修改。如果模型的内容在应用程序的其他模块中更新,小部件也会相应更新。- class SubmitPolicy¶
此枚举描述了
QDataWidgetMapper支持的可能的提交策略。常量
描述
QDataWidgetMapper.AutoSubmit
每当小部件失去焦点时,小部件的当前值将被设置到项目模型中。
QDataWidgetMapper.ManualSubmit
在调用
submit()之前,模型不会被更新。
注意
当使用
from __feature__ import true_property时,属性可以直接使用,否则通过访问器函数使用。- property currentIndexᅟ: int¶
此属性保存当前行或列。
如果方向是水平的(默认情况下),小部件将填充来自
index行的数据,否则将填充来自index列的数据。- Access functions:
- property orientationᅟ: Qt.Orientation¶
此属性保存模型的朝向。
如果方向是Qt::Horizontal(默认值),一个小部件将映射到数据模型的一列。该小部件将填充来自其映射列和
currentIndex()指向的行的模型数据。使用 Qt::Horizontal 用于看起来像这样的表格数据:
1
Qt 挪威
奥斯陆
2
Qt 澳大利亚
布里斯班
3
Qt 美国
硅谷
4
Qt 中国
北京
5
Qt 德国
柏林
如果方向设置为Qt::Vertical,一个小部件将映射到一行。调用
setCurrentIndex()将改变当前列。小部件将填充来自其映射行和currentIndex()指向的列的模型数据。使用 Qt::Vertical 来显示如下所示的表格数据:
1
2
3
4
5
Qt 挪威
Qt 澳大利亚
Qt 美国
Qt 中国
Qt 德国
奥斯陆
布里斯班
硅谷
北京
柏林
更改方向会清除所有现有的映射。
- Access functions:
- property submitPolicyᅟ: QDataWidgetMapper.SubmitPolicy¶
此属性保存当前的提交策略。
更改当前提交策略将使所有小部件恢复到模型中的当前数据。
- Access functions:
使用父对象
parent构造一个新的QDataWidgetMapper。默认情况下,方向是水平的,提交策略是AutoSubmit。警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
添加一个
widget和模型中的一个section之间的映射。如果方向是水平的(默认),则section是模型中的一列,否则是一行。对于以下示例,我们假设一个模型
myModel,它有两列:第一列包含组中人员的姓名,第二列包含他们的年龄。第一列映射到QLineEditnameLineEdit,第二列映射到QSpinBoxageSpinBox:mapper = QDataWidgetMapper() mapper.setModel(myModel) mapper.addMapping(nameLineEdit, 0) mapper.addMapping(ageSpinBox, 1)
备注:
如果
widget已经映射到一个部分,旧的映射将被新的映射替换。只允许部分和小部件之间的一对一映射。不可能将单个部分映射到多个小部件,或将单个小部件映射到多个部分。
- addMapping(widget, section, propertyName)
- Parameters:
widget –
QWidgetsection – int
propertyName –
QByteArray
基本上与
addMapping()相同,但增加了指定要使用的属性的可能性,通过指定propertyName。另请参阅
- clearMapping()¶
清除所有映射。
- currentIndex()¶
- Return type:
整数
另请参阅
属性
currentIndexᅟ的获取器。- currentIndexChanged(index)¶
- Parameters:
索引 – int
此信号在当前索引更改并且所有小部件都填充了新数据后发出。
index是新的当前索引。属性
currentIndexᅟ的通知信号。- itemDelegate()¶
- Return type:
返回当前项目委托。
另请参阅
返回在将数据映射到给定的
widget时使用的属性名称。返回
widget映射到的部分,如果widget未映射则返回-1。返回映射在
section处的小部件,如果该部分没有映射小部件,则返回0。- model()¶
- Return type:
返回当前模型。
另请参阅
- orientation()¶
- Return type:
另请参阅
属性
orientationᅟ的获取器。移除给定
widget的映射。- revert()¶
使用模型的当前数据重新填充所有小部件。所有未提交的更改将会丢失。
- rootIndex()¶
- Return type:
返回当前的根索引。
另请参阅
- setCurrentIndex(index)¶
- Parameters:
索引 – int
另请参阅
属性
currentIndexᅟ的设置器。- setCurrentModelIndex(index)¶
- Parameters:
索引 –
QModelIndex
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
如果方向是水平的(默认情况下),则将当前索引设置为
index的行,否则设置为index的列。内部调用
setCurrentIndex()。这个便捷槽可以连接到另一个视图的选择模型的信号 currentRowChanged() 或 currentColumnChanged()。以下示例说明了每当名为
myTableView的QTableView的选择发生变化时,如何使用新数据更新所有小部件:mapper = QDataWidgetMapper() connect(myTableView.selectionModel(), QItemSelectionModel.currentRowChanged, mapper.setCurrentModelIndex)
另请参阅
- setItemDelegate(delegate)¶
- Parameters:
delegate –
QAbstractItemDelegate
将项目委托设置为
delegate。该委托将用于使用setEditorData()和setModelData()将数据从模型写入小部件以及从小部件写入模型。任何现有的委托将被移除,但不会被删除。
QDataWidgetMapper不会拥有delegate的所有权。委托还决定何时应用数据以及何时更改编辑器,使用
commitData()和closeEditor()。警告
您不应在小部件映射器或视图之间共享同一个委托实例。这样做可能会导致不正确或不符合直觉的编辑行为,因为连接到给定委托的每个视图可能会接收到
closeEditor()信号,并尝试访问、修改或关闭已经关闭的编辑器。另请参阅
- setModel(model)¶
- Parameters:
模型 –
QAbstractItemModel
将当前模型设置为
model。如果之前设置了另一个模型,所有与该旧模型的映射将被清除。另请参阅
- setOrientation(aOrientation)¶
- Parameters:
aOrientation –
Orientation
另请参阅
属性
orientationᅟ的设置器。- setRootIndex(index)¶
- Parameters:
索引 –
QModelIndex
将根项目设置为
index。这可以用于显示树的一个分支。传递一个无效的模型索引以显示最顶层的分支。另请参阅
- setSubmitPolicy(policy)¶
- Parameters:
策略 –
SubmitPolicy
另请参阅
属性
submitPolicyᅟ的设置器。- submit()¶
- Return type:
布尔
将所有映射小部件的更改提交到模型。
对于每个映射的部分,项目委托从小部件读取当前值并在模型中设置它。最后,调用模型的submit()方法。
如果所有值都已提交,则返回
true,否则返回 false。注意:对于数据库模型,可以使用QSqlQueryModel::lastError()来检索最后一个错误。
- submitPolicy()¶
- Return type:
另请参阅
属性
submitPolicyᅟ的获取器。- toFirst()¶
如果方向是水平的(默认),则使用模型的第一行数据填充小部件,否则使用第一列的数据。
这相当于调用
setCurrentIndex(0)。- toLast()¶
如果方向是水平的(默认情况下),则使用模型最后一行的数据填充小部件,否则使用最后一列的数据。
内部调用
setCurrentIndex()。- toNext()¶
如果方向是水平的(默认),则用模型下一行的数据填充小部件,否则用下一列的数据填充。
内部调用
setCurrentIndex()。如果模型中没有下一行,则不执行任何操作。- toPrevious()¶
如果方向是水平的(默认情况下),则使用模型前一行的数据填充小部件,否则使用前一列的数据。
内部调用
setCurrentIndex()。如果模型中没有前一行,则不执行任何操作。