【发布时间】:2017-03-29 13:30:27
【问题描述】:
我希望以编程方式在 QTreeView 中选择一行,我找到了 95% 的答案here。
select() 方法完美地完成了这项工作,只是它似乎不会触发任何点击视图的事件。
我通过自己调用所需的信号找到了一种解决方法 - 但是否有任何方法可以模拟人类点击并发送所有相关信号?
这是我的解决方法(在 Python 中):
oldIndex=treeView.selectionModel().currentIndex()
newIndex=treeView.model().indexFromItem(item)
#indexes stored----------------------------------
treeView.selectionModel().select(
newIndex,
QtGui.QItemSelectionModel.ClearAndSelect)
#selection changed-------------------------------
treeView.selectionModel().currentRowChanged.emit(
newIndex,
oldIndex)
#signal manually emitted-------------------------
【问题讨论】:
-
您指的是哪些具体的相关信号?
-
@ekhumoro 可能是 selectionChanged 信号。但是,实际上应该已经发出了,不是吗?
-
事实上,我需要 currentRowChanged 信号,所以这个 hack 在我的情况下有效,但我想知道是否有任何方法可以模仿人类点击以及由此产生的所有信号。
-
顺便说一句,我不知道 selectionChange 是做什么的。对它感兴趣,您尝试连接它而不是 currentRowChanged,但正如文档所说,它不是信号而是插槽。你认为我可以用它来实际改变选择吗?
-
@Gui3。我认为@Trilarion 的意思是treeView.selectionModel().selectionChanged。但是,它与
currentChanged不太一样,因为它传递的是QItemSelection对象,而不是索引。
标签: python qt pyqt selection qtreeview