【问题标题】:How to react to keyboard selection on QtTreeView?如何对 QtreeView 上的键盘选择做出反应?
【发布时间】:2012-12-04 20:57:13
【问题描述】:

QTreeView 具有 clicked 信号,但不像 QTreeWidget 那样具有 itemChanged。我必须使用QTreeView,因为它是“基于模型的”。尽管如此,如果我的用户使用键盘选择一行,clicked 将不会被发送,并且我的回调将永远不会被调用。我应该注册什么信号?

【问题讨论】:

    标签: python pyqt pyside signals-slots qtreeview


    【解决方案1】:

    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())
    

    selecteddeselectedQItemSelection 的实例。

    【讨论】:

    • 似乎不太确定: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) 无法触发任何事情,甚至没有错误。
    • @e-satis。您需要连接到 选择模型 发出的信号,而不是树视图本身。请参阅我的更新答案。
    • 酷,它有效!这个选择模型是什么?它有什么用?
    • @e-satis。从概念上讲,选择模型遵循 Qt 的 model/view framework 的其余部分的模式。也就是说,它提供了一个泛化,允许您为自定义项目模型和/或视图创建专门的选择模型。当然,如果您没有特殊要求,默认型号通常就足够了。
    猜你喜欢
    • 2015-05-17
    • 2021-09-10
    • 1970-01-01
    • 2016-10-02
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多