在QTreeview中以编程方式获取和设置活动行(PyQt)
有没有办法获取和改变QTreeView中当前活动的行(不是QTreeWidget)?这里说的“活动”是指那个有焦点高亮的行,而不是被选中的行。在绘制事件中,我可以用QStyle.State_HasFocus
来获取活动行,但在其他地方似乎不行。
3 个回答
0
对我来说,问这个问题没有什么新鲜的,因为很简单;你可以使用Qt-Designer来创建一个QTreeView
,然后再创建一个文本输入框,接着通过动作编辑器把它们连接起来,最后把UI文件转换成Python文件,这样你就能看到背后是怎么运作的。
如果你尝试一下,就会发现这些。
QtCore.QObject.connect(self.treeView, QtCore.SIGNAL(_fromUtf8("clicked(QModelIndex)")), self.test)
1
当前项是指被焦点矩形框选中的那个项目。你可以通过树形视图的 selectionModel 功能来改变它。如果你不想更改当前选中的项目,可以在 setCurrentIndex 方法中传入 QtGui.QItemSelectionModel.NoUpdate 作为第二个参数。下面是一个例子:
index = model.index(3, 0);
view.selectionModel().setCurrentIndex(index, QtGui.QItemSelectionModel.NoUpdate)
这段代码应该会把当前项移动到索引为 3 的项目上。
希望这能帮到你,祝好!
4
你可以使用 currentIndex()
和 setCurrentIndex()
这两个函数来获取或设置当前活动的行。这两个函数都可以在 QTreeView
和 QItemSelectionModel
中找到(后者是通过 QTreeView.selectionModel()
得到的)。
尽管名字叫 QItemSelectionModel
,但它实际上是独立处理当前视图中的项目和视图的选择的。