在关闭表单时,如果QTableView单元格失去焦点,可以通过以下步骤保存正在编辑的数据:
currentIndex()
方法获取当前选中的单元格索引,然后使用QTableView::isPersistentEditorOpen()
方法检查该单元格是否处于编辑状态。QAbstractItemView::closeEditor()
方法来关闭当前正在编辑的单元格编辑器,并将编辑结果保存或取消。QAbstractItemModel::setData()
)将编辑后的数据保存到模型中。以下是一个示例代码,演示如何在关闭表单时保存正在编辑的数据:
# 导入必要的模块
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableView, QVBoxLayout, QWidget, QPushButton
from PyQt5.QtCore import Qt, QAbstractTableModel, QModelIndex
class MyTableModel(QAbstractTableModel):
def __init__(self, data):
super().__init__()
self.data = data
def rowCount(self, parent=QModelIndex()):
return len(self.data)
def columnCount(self, parent=QModelIndex()):
return len(self.data[0])
def data(self, index, role=Qt.DisplayRole):
if role == Qt.DisplayRole:
return self.data[index.row()][index.column()]
def setData(self, index, value, role=Qt.EditRole):
if role == Qt.EditRole:
self.data[index.row()][index.column()] = value
return True
return False
def flags(self, index):
return Qt.ItemIsEditable | Qt.ItemIsEnabled | Qt.ItemIsSelectable
class MyWindow(QMainWindow):
def __init__(self):
super().__init__()
# 创建数据
self.data = [['A1', 'B1', 'C1'],
['A2', 'B2', 'C2'],
['A3', 'B3', 'C3']]
# 创建表格视图和模型
self.table_view = QTableView()
self.model = MyTableModel(self.data)
self.table_view.setModel(self.model)
# 创建保存按钮
self.save_button = QPushButton('保存')
self.save_button.clicked.connect(self.saveData)
# 创建布局并将表格视图和按钮添加到布局中
layout = QVBoxLayout()
layout.addWidget(self.table_view)
layout.addWidget(self.save_button)
# 创建主窗口部件并设置布局
central_widget = QWidget()
central_widget.setLayout(layout)
self.setCentralWidget(central_widget)
def saveData(self):
# 检查是否有单元格处于编辑状态
if self.table_view.currentIndex().isValid() and self.table_view.isPersistentEditorOpen():
# 关闭当前正在编辑的单元格编辑器
self.table_view.closeEditor(self.table_view.currentIndex(), QAbstractItemView.NoEditTriggers)
# 保存正在编辑的数据
self.model.submitAll()
if __name__ == '__main__':
app = QApplication([])
window = MyWindow()
window.show()
app.exec_()
在上述示例中,我们创建了一个自定义的数据模型MyTableModel
,继承自QAbstractTableModel
,用于管理表格数据。然后,我们创建了一个主窗口MyWindow
,其中包含一个QTableView作为表格视图,以及一个保存按钮。通过点击保存按钮,我们可以保存正在编辑的数据。
请注意,上述示例中没有提及任何特定的云计算品牌商或产品。如果您需要在云计算环境中使用QTableView和相关技术,您可以根据您选择的云计算平台的特定要求和支持,选择适当的解决方案和产品。
领取专属 10元无门槛券
手把手带您无忧上云