在QTreeview中以编程方式获取和设置活动行(PyQt)

5 投票
3 回答
10078 浏览
提问于 2025-04-17 02:32

有没有办法获取和改变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() 这两个函数来获取或设置当前活动的行。这两个函数都可以在 QTreeViewQItemSelectionModel 中找到(后者是通过 QTreeView.selectionModel() 得到的)。

尽管名字叫 QItemSelectionModel,但它实际上是独立处理当前视图中的项目和视图的选择的。

撰写回答