QSqlTableModel QDataWidgetMapper 绑定 控件
时间: 2023-12-30 21:45:46 浏览: 82
QSqlTableModel和QDataWidgetMapper可以一起使用,将数据库表中的数据绑定到控件上,以便用户可以直接在控件上编辑数据,然后将更改保存回数据库。
具体步骤如下:
1. 创建一个QSqlTableModel对象,并设置其表名、数据库连接等属性。
2. 创建需要绑定的控件,比如QLineEdit、QComboBox等。
3. 创建一个QDataWidgetMapper对象,并将其与QSqlTableModel对象绑定。
4. 将每个控件与QDataWidgetMapper对象中的一个列绑定。
5. 调用QDataWidgetMapper的toFirst()方法,将第一行数据显示在控件上。
6. 当用户编辑控件上的数据时,调用QDataWidgetMapper的submit()方法,将更改保存回数据库。
示例代码如下:
```python
# 创建一个QSqlTableModel对象
model = QSqlTableModel()
model.setTable("person")
model.setEditStrategy(QSqlTableModel.OnManualSubmit) # 手动提交更改
model.select()
# 创建需要绑定的控件
nameEdit = QLineEdit()
ageSpin = QSpinBox()
genderCombo = QComboBox()
genderCombo.addItems(["Male", "Female"])
# 创建一个QDataWidgetMapper对象,并将其与QSqlTableModel对象绑定
mapper = QDataWidgetMapper()
mapper.setModel(model)
# 将每个控件与QDataWidgetMapper对象中的一个列绑定
mapper.addMapping(nameEdit, 0)
mapper.addMapping(ageSpin, 1)
mapper.addMapping(genderCombo, 2)
# 调用QDataWidgetMapper的toFirst()方法,将第一行数据显示在控件上
mapper.toFirst()
# 当用户编辑控件上的数据时,调用QDataWidgetMapper的submit()方法,将更改保存回数据库
nameEdit.editingFinished.connect(mapper.submit)
ageSpin.editingFinished.connect(mapper.submit)
genderCombo.currentIndexChanged.connect(mapper.submit)
```
注意:使用QSqlTableModel和QDataWidgetMapper绑定控件时,需要手动提交更改,即将QSqlTableModel的编辑策略设置为QSqlTableModel.OnManualSubmit。否则,当用户编辑控件上的数据时,更改会立即保存回数据库,而不是等待用户确认后再保存。
阅读全文