QTableview绑定了QStandardItemModel,如何获取选中行的item包括隐藏列的tiem
时间: 2023-05-26 14:04:56 浏览: 48
可以使用QTableView的selectedIndexes()函数获取选中行的所有索引,然后遍历这些索引,通过QStandardItemModel的itemFromIndex()函数获取对应的item,包括隐藏列的item也能获取到。
示例代码:
```
QModelIndexList selectedIndexes = tableView->selectionModel()->selectedIndexes();
foreach (QModelIndex index, selectedIndexes) {
QStandardItem *item = model->itemFromIndex(index);
// TODO: 处理获取到的item
}
```
相关问题
pyqt5中QTableview绑定了QStandardItemModel,如何获取选中行的item包括隐藏列的tiem,具体效率高的实现代码
可以使用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,因此效率会更高一些。
pyqt5中QTableview绑定了QStandardItemModel,如何快速获取选中行的item文本包括隐藏列的tiem文本,具体效率高的实现代码
可以使用QItemSelectionModel来获取选中的行和列,再从QStandardItemModel中获取对应的item,包括隐藏列的item。
以下是一个示例代码:
```python
from PyQt5.QtWidgets import QApplication, QTableView, QStandardItemModel, QItemSelectionModel
app = QApplication([])
# 创建QStandardItemModel并添加数据
model = QStandardItemModel()
model.setColumnCount(3)
for i in range(5):
row = []
for j in range(3):
item = QStandardItem(f"item {i},{j}")
row.append(item)
model.appendRow(row)
# 创建QTableView并绑定QStandardItemModel
view = QTableView()
view.setModel(model)
# 获取选中的行和列
selections = view.selectionModel().selectedIndexes()
# 遍历选中的行和列,获取对应的item
for selection in selections:
row = selection.row()
col = selection.column()
item = model.item(row, col)
if item:
text = item.text()
print(text)
```
这个示例代码可以获取所有选中的item文本,包括隐藏列的item文本。如果只需要特定列的item文本,可以加入一个过滤条件。