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
,它有两列:第一列包含组中人员的姓名,第二列包含他们的年龄。第一列映射到QLineEdit
nameLineEdit
,第二列映射到QSpinBox
ageSpinBox
:mapper = QDataWidgetMapper() mapper.setModel(myModel) mapper.addMapping(nameLineEdit, 0) mapper.addMapping(ageSpinBox, 1)
备注:
如果
widget
已经映射到一个部分,旧的映射将被新的映射替换。只允许部分和小部件之间的一对一映射。不可能将单个部分映射到多个小部件,或将单个小部件映射到多个部分。
- addMapping(widget, section, propertyName)
- Parameters:
widget –
QWidget
section – 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()
。如果模型中没有前一行,则不执行任何操作。