首页 > 解决方案 > PyQt5 QSqlTableModel在行插入后取消

问题描述

根据 QSQLTableModel 的文档,在提交事务之前,从模型中删除一行不会从表视图中删除该行。我可以解决这个问题;但是,当我插入新行然后取消编辑时,我需要从模型和视图中删除该行。关于如何解决这个问题的任何建议?

class SclDataModel(QSqlTableModel):
    def __init__(self, parent=None):
        super(SclDataModel, self).__init__(parent)
        self.setTable("scldata")
        self.setEditStrategy(QSqlTableModel.OnManualSubmit)
        self.setHeaderData(0, Qt.Horizontal, 'recordid')
        self.setHeaderData(1, Qt.Horizontal, 'svcdataid')
        self.setHeaderData(2, Qt.Horizontal, 'Receipts Start')
        self.setHeaderData(3, Qt.Horizontal, 'Receipts End')
        self.setHeaderData(4, Qt.Horizontal, 'Billing Rate')
        self.action = 0

    def revert(self):
        if self.action ==1   
            # How TO Remove the inserted row from the view????


class SclDataBrowse(QWidget):
    def __init__(self, parent=None):
        super(SclDataBrowse, self).__init__(parent)

    ...

    def add_record(self):
        rec = self.model.record()
        rec.setValue('recordid', str(uuid.uuid4()))
        rec.setValue('svcdataid', self.parentid)
        row = self.model.rowCount()
        self.model.insertRecord(row, rec)
        ndx = self.model.index(row, 2)
        self.model.action = 1
        self.tbl_View.edit(ndx)
        self.tbl_View.selectionModel().setCurrentIndex(ndx, QItemSelectionModel.Select)

标签: pythonpython-3.xpyqtpyqt5

解决方案


将还原方法更改为以下内容:

def revert(self):
     if self.action == 1:                
          self.removeRow(self.rowCount()-1)
          self.submitAll()

推荐阅读