pyqt5中QTableview绑定了QStandardItemModel,如何获取选中行的item包括隐藏列的tiem,具体效率高的实现代码
时间: 2023-05-26 20:04:59 浏览: 128
vue iview 隐藏Table组件里的某一列操作
可以使用QItemSelectionModel来获取选中行的item,包括隐藏列的item。具体实现代码如下:
```python
from PyQt5.QtGui import QStandardItemModel, QItemSelectionModel
from PyQt5.QtWidgets import QApplication, QTableView
class TableView(QTableView):
def __init__(self, parent=None):
super().__init__(parent)
self.model = QStandardItemModel(10, 5)
self.setModel(self.model)
self.setSelectionBehavior(QTableView.SelectRows)
def getSelectedItems(self):
items = []
selection_model = self.selectionModel()
indexes = selection_model.selectedIndexes()
for index in indexes:
item = self.model.itemFromIndex(index)
items.append(item)
return items
```
该代码中,TableView类继承自QTableView,同时绑定了一个QStandardItemModel。在getSelectedItems方法中,使用QItemSelectionModel获取选中行的所有索引,并通过索引获取QStandardItemModel中的item。
这种方式可以获取到所有的item,包括隐藏列的item,但是效率可能会比较低,因为遍历所有的索引需要一定的时间。如果需要进一步提高效率,可以考虑采用另外一种方式,即通过QAbstractItemView中的selectedIndexes()方法直接获取选中行的item。具体实现代码如下:
```python
class TableView2(QTableView):
def __init__(self, parent=None):
super().__init__(parent)
self.model = QStandardItemModel(10, 5)
self.setModel(self.model)
self.setSelectionBehavior(QTableView.SelectRows)
def getSelectedItems(self):
items = []
indexes = self.selectedIndexes()
for index in indexes:
item = self.model.itemFromIndex(index)
items.append(item)
return items
```
该代码比第一种方式更加简单,由于直接调用QAbstractItemView中的selectedIndexes()方法获取选中行的item,因此效率会更高一些。
阅读全文