qt tanlebiew显示数据库数据并使用委托更改数据保存到数据库
时间: 2024-05-09 21:18:49 浏览: 174
在Qt中,可以使用QTableView控件来显示数据库中的数据。要使用委托更改数据并将更改保存到数据库,可以使用QItemDelegate类。
以下是一个简单的示例代码,说明如何使用QTableView和QItemDelegate来显示和编辑数据库中的数据:
```python
# 导入必要的模块
from PyQt5.QtCore import Qt, QModelIndex
from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QTableView, QPushButton, QMessageBox, QItemDelegate
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel
# 定义一个委托类,用于编辑表格中的数据
class MyDelegate(QItemDelegate):
def createEditor(self, parent, option, index):
# 创建一个QLineEdit控件,用于编辑数据
editor = QLineEdit(parent)
editor.setFrame(False)
editor.setAlignment(Qt.AlignCenter)
return editor
def setEditorData(self, editor, index):
# 将表格中的数据显示在QLineEdit控件中
value = index.model().data(index, Qt.DisplayRole)
editor.setText(str(value))
def setModelData(self, editor, model, index):
# 将QLineEdit控件中的数据保存到数据库中
value = editor.text()
model.setData(index, value, Qt.EditRole)
model.submitAll()
# 定义一个窗口类,用于显示表格和按钮
class MyWindow(QWidget):
def __init__(self):
super().__init__()
# 连接数据库
db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('mydatabase.db')
db.open()
# 创建一个QTableView控件,并设置委托
self.tableview = QTableView(self)
delegate = MyDelegate(self.tableview)
self.tableview.setItemDelegate(delegate)
# 创建一个QSqlTableModel,并设置数据源
self.model = QSqlTableModel(self)
self.model.setTable('mytable')
self.model.select()
# 将QSqlTableModel绑定到QTableView控件中
self.tableview.setModel(self.model)
# 创建一个保存按钮,用于保存更改
self.save_button = QPushButton('保存', self)
self.save_button.clicked.connect(self.save_data)
# 创建一个垂直布局,并将QTableView和QPushButton添加到其中
layout = QVBoxLayout(self)
layout.addWidget(self.tableview)
layout.addWidget(self.save_button)
def save_data(self):
# 提交所有更改,并显示保存成功的消息框
if self.model.submitAll():
QMessageBox.information(self, '保存成功', '数据已保存!')
# 创建一个应用程序,并显示窗口
app = QApplication([])
window = MyWindow()
window.show()
app.exec_()
```
在这个示例代码中,QTableView控件用于显示数据库中的数据,QItemDelegate用于编辑表格中的数据,并将更改保存到数据库中。在窗口中还添加了一个保存按钮,用于提交所有更改并显示保存成功的消息框。
阅读全文