在给定位置向 QTableView 对象添加附加行

Add additional line to QTableView object at a given position

在我的 Gui 中,我创建了一个带有 QStandardItemModel 的 QTableView,我想在给定位置添加额外的行或列。

class Output(object):
    def __init__(self):
        ''' '''
        self.tabs = QtGui.QTabWidget()
        self.group_box = QtGui.QGroupBox('Example')

    def run(self):
        form_layout = QtGui.QFormLayout(self.group_box)
        self.tabs.addTab(self.__genTable(),"Tab 1")
        self.tabs.addTab(self.__genTable(),"Tab 2")

        form_layout.addWidget(self.tabs)

        return self.group_box

    def __genTable(self):
        table_view = QtGui.QTableView()

        table_view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
        table_view.customContextMenuRequested.connect( self.__openMenu )

        table_view.setSelectionBehavior( QtGui.QTableView.SelectItems )
        table_view.setModel(QtGui.QStandardItemModel(4, 2))

        return table_view

    def __openMenu(self, position):
        menu = QtGui.QMenu()
        sub_menu_row = QtGui.QMenu("Row")
        menu.addMenu(sub_menu_row)
        addRowBelowAction = sub_menu_row.addAction("add Row below")
        action = menu.exec_(QtGui.QCursor.pos())

        if action == addRowBelowAction:
            idx = self.tabs.currentWidget().selectionModel().currentIndex()
            for i in range(self.tabs.count()):
                model = self.tabs.widget(i).selectionModel()
                model.insertRow(idx.row(), QtCore.QModelIndex())

不幸的是,我收到以下错误:

model.insertRow(idx.row(), QtCore.QModelIndex())
AttributeError: 'PySide.QtGui.QItemSelectionModel' object has no attribute 'insertRow'

未经测试,但请尝试引用您的模型
然后调用模型的适当方法(insertRow、insertColumn)。
这些方法的效果将在视图中显而易见。 例如:

table_view = QtGui.QTableView()
table_view.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
table_view.setSelectionBehavior( QtGui.QTableView.SelectItems )
model = QtGui.QStandardItemModel(4, 2)
table_view.setModel(model)
model.insertRow(2, QtCore.QModelIndex())