【发布时间】:2012-12-04 20:57:13
【问题描述】:
QTreeView 具有 clicked 信号,但不像 QTreeWidget 那样具有 itemChanged。我必须使用QTreeView,因为它是“基于模型的”。尽管如此,如果我的用户使用键盘选择一行,clicked 将不会被发送,并且我的回调将永远不会被调用。我应该注册什么信号?
【问题讨论】:
标签: python pyqt pyside signals-slots qtreeview
QTreeView 具有 clicked 信号,但不像 QTreeWidget 那样具有 itemChanged。我必须使用QTreeView,因为它是“基于模型的”。尽管如此,如果我的用户使用键盘选择一行,clicked 将不会被发送,并且我的回调将永远不会被调用。我应该注册什么信号?
【问题讨论】:
标签: python pyqt pyside signals-slots qtreeview
QTreeView 类继承 QAbstractItemView,它提供对 selection model 的访问。
选择模型具有several signals,用于注册对当前项目所做的更改以及鼠标和键盘的选择。
编辑:
为了清楚起见,信号需要这样连接:
selmodel = self.listing.selectionModel()
selmodel.selectionChanged.connect(self.handleSelectionChanged)
处理程序的签名应如下所示:
def handleSelectionChanged(self, selected, deselected):
indexes = selected.indexes()
if indexes:
print('row: %d' % indexes[0].row())
selected 和 deselected 是 QItemSelection 的实例。
【讨论】:
self.listing.currentRowChanged .connect(self.on_listing_clicked) 触发 AttributeError: 'PySide.QtGui.QTreeView' object has no attribute 'currentRowChanged' 而 self.listing.clicked 就像一个魅力。
self.listing.connect(QtCore.SIGNAL('currentRowChanged()'), self.on_listing_clicked) 无法触发任何事情,甚至没有错误。