问题:如何在表格底部插入空白行,并在行被编辑后出现委托?
到目前为止,我所做的是:我通过增加行数在QTableView的底部添加了新行,如下所示:
def rowCount(self, parent = None):
return super(TransactionTblSqlQueryModel,self).rowCount() + 1
但是,在编辑最后一行时,默认委托不存在。仅在保存/提交然后编辑此行之后,代理才会显示...
答案 0 :(得分:0)
我无法使用默认的代表,但是,您可以创建自定义代表,然后将其设置为QTableview的所需列
首先创建代表:
class LineEditDelegate(QtWidgets.QStyledItemDelegate):
def createEditor(self, QWidget, QStyleOptionViewItem, QModelIndex):
return QtWidgets.QLineEdit(QWidget)
def setEditorData(self, QWidget, QModelIndex):
try:
value = QModelIndex.model().data(QModelIndex, QtCore.Qt.EditRole)
QWidget.setText(value)
except:
QWidget.setText("")
def setModelData(self, QWidget, QAbstractItemModel, QModelIndex):
try:
value = QWidget.text()
QAbstractItemModel.setData(QModelIndex, value, QtCore.Qt.EditRole)
except:
QAbstractItemModel.setData(QModelIndex, "", QtCore.Qt.EditRole)
def updateEditorGeometry(self, QWidget, QStyleOptionViewItem, QModelIndex):
QWidget.setGeometry(QStyleOptionViewItem.rect)
class SpinBoxDelegate(QtWidgets.QStyledItemDelegate):
def createEditor(self, QWidget, QStyleOptionViewItem, QModelIndex):
return QtWidgets.QSpinBox(QWidget)
def setEditorData(self, QWidget, QModelIndex):
try:
value = QModelIndex.model().data(QModelIndex, QtCore.Qt.EditRole)
QWidget.setValue(value)
except:
QWidget.setValue(0)
def setModelData(self, QWidget, QAbstractItemModel, QModelIndex):
try:
value = QWidget.value()
QAbstractItemModel.setData(QModelIndex, value, QtCore.Qt.EditRole)
except:
QAbstractItemModel.setData(QModelIndex, 0, QtCore.Qt.EditRole)
def updateEditorGeometry(self, QWidget, QStyleOptionViewItem, QModelIndex):
QWidget.setGeometry(QStyleOptionViewItem.rect)
然后将代表设置为QTableview的列
class Controller(QtWidgets.QMainWindow):
def __init__(self, parent):
...
lineEditDelegate = LineEditDelegate(self.__ui.tableView)
spinBoxDelegate = SpinBoxDelegate(self.__ui.tableView)
self.__ui.tableView.setItemDelegateForColumn(1, lineEditDelegate)
self.__ui.tableView.setItemDelegateForColumn(5, spinBoxDelegate)
...
自定义委托现在应按预期显示