QStandardItemModel 是一个模型,因此您可以将QAbstractItemModel 的所有方法用作告诉我们行数的rowCount(),因此您可以遍历它们并使用item() 方法得到QStandarItem关联每个索引,然后使用QStandarItem的text()方法获取文本。
l = [self.entry.item(i).text() for i in range(self.entry.rowCount())]
print(l)
另一方面,如果您想选择从QAbstractItemView 继承的视图元素,如本例中的QListView,您必须使用与将使用@987654332 方法获得的视图关联的QItemSelectionModel @。 QItemSelectionModel 有几种方法以不同的方式选择和取消选择,在这种情况下,您必须使用方法 select 并传递标志 QItemSelectionModel::Select。另一方面,默认情况下,视图可以选择单个元素,如果要选择更多元素,则必须使用 setSelectionMode() 方法并将标志 QAbstractItemView::MultiSelection 传递给它。
例子:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
lay = QtWidgets.QVBoxLayout(self)
button = QtWidgets.QPushButton("to list")
button.clicked.connect(self.modelToList)
self.listView = QtWidgets.QListView()
lay.addWidget(button)
lay.addWidget(self.listView)
self.entry = QtGui.QStandardItemModel()
self.listView.setModel(self.entry)
for text in ("Itemname1", "Itemname2", "Itemname3", "Itemname4"):
it = QtGui.QStandardItem(text)
self.entry.appendRow(it)
self.listView.setSelectionMode(QtWidgets.QAbstractItemView.MultiSelection)
sm = self.listView.selectionModel()
for item in (self.entry.item(1), self.entry.item(2)):
index = self.entry.indexFromItem(item)
sm.select(index, QtCore.QItemSelectionModel.Select)
def modelToList(self):
l = [self.entry.item(i).text() for i in range(self.entry.rowCount())]
print(l)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())
如果您只想选择一个项目,那么您必须使用setCurrentIndex(),因为它在内部调用selectionModel() 的select() 方法。
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from random import randint
class Widget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(Widget, self).__init__(parent)
lay = QtWidgets.QVBoxLayout(self)
button = QtWidgets.QPushButton("to list")
button.clicked.connect(self.modelToList)
self.listView = QtWidgets.QListView()
lay.addWidget(button)
lay.addWidget(self.listView)
self.entry = QtGui.QStandardItemModel()
self.listView.setModel(self.entry)
for text in ("Itemname1", "Itemname2", "Itemname3", "Itemname4"):
it = QtGui.QStandardItem(text)
self.entry.appendRow(it)
item = self.entry.item(randint(0, self.entry.rowCount()-1))
self.listView.setCurrentIndex(self.entry.indexFromItem(item))
def modelToList(self):
l = [self.entry.item(i).text() for i in range(self.entry.rowCount())]
print(l)
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
w = Widget()
w.show()
sys.exit(app.exec_())