QAbstractTableModel设置一行选中
时间: 2024-01-15 18:04:37 浏览: 104
要设置QAbstractTableModel中的一行选中,可以在QAbstractTableModel的子类中实现flags()函数,该函数返回一个标志位,控制单元格的属性,如是否可编辑、是否可选中等。如果要设置一行选中,可以在flags()函数中设置Qt::ItemIsSelectable标志位为true,同时设置Qt::ItemIsEnabled标志位为false,如下所示:
```python
class MyTableModel(QAbstractTableModel):
def __init__(self, data, headers):
super().__init__()
self._data = data
self._headers = headers
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()]
return QVariant()
def headerData(self, section, orientation, role=Qt.DisplayRole):
if role == Qt.DisplayRole and orientation == Qt.Horizontal:
return self._headers[section]
return QVariant()
def flags(self, index):
if index.column() == 0:
return Qt.ItemIsEnabled | Qt.ItemIsSelectable # 第一列可选中,不能编辑
else:
return Qt.ItemIsEnabled | Qt.ItemIsEditable # 其他列可以编辑,不能选中
```
这样,QAbstractTableModel中的第一列就可以选中了,其他列可以编辑,但不能选中。请注意,如果要设置多行选中,可以在flags()函数中判断行号是否在选中行的范围内,如果在,则设置Qt::ItemIsSelectable标志位为true。
阅读全文