【发布时间】:2021-07-15 22:35:24
【问题描述】:
我最近参与了一个使用 PyQt 的项目。它使用的是 Qt4,但由于在最新系统上安装它以及所有其他工具和包的痛苦,我决定将所有内容更新到 Python3、Qt5 等。
在旧代码中,
self.selectionModel().selectionChanged.connect(self.selection_changed_event)
有效且有效。
@QtCore.pyqtSlot("QTreeView, QItemSelection, QItemSelection")
def selection_changed_event(self, selected, deselected):
"""Event handler.
Triggered by TreeView selection change.
Get Title from selected/deselected items. Send SelectionEvent(title) to widgets to show/hide content as needed.
:param selected: New selected item.
:param deselected: Item that was selected.
:return:
"""
自从更新到 Qt5,现在说 connect() 失败了。虽然我是个菜鸟,但我的理解是我确实想检索视图的selectionModel,然后连接到它的selectionChanged 信号。所以我应该有self.ITEM.selectionModel().selectionChanged.connect(self.SLOT)的形式。
在插槽内,它似乎符合标准,我应该有 QModelIndex 告诉活动期间选择的内容和 QModelIndex 告诉活动期间取消选择的内容。
因此,我对此所做的唯一其他值得注意的更改是从 QTGui 切换到 QtWidget。这是因为 QtGui 和 QtWidget 从 Qt4 转移到 Qt5。
旧:
class QMenuTreeView(QtGui.QTreeView):
selectionChangeEvent = QtCore.pyqtSignal(str)
def __init__(self, parent=None, log=None):
QtGui.QTreeView.__init__(self, parent)
self.parent = parent
...
self.selectionModel().selectionChanged.connect(self.selection_changed_event)
新:
class QMenuTreeView(QtWidgets.QTreeView):
selectionChangeEvent = QtCore.pyqtSignal(str)
def __init__(self, parent=None, log=None):
QtWidgets.QTreeView.__init__(self, parent)
self.parent = parent
...
self.selectionModel().selectionChanged.connect(self.selection_changed_event)
Qt4 和 QT5 之间是否还有其他我不理解的变化,并且会导致这种情况? 看来我不能使用 QtGui,因为对 QTreeView 的引用不再有效,此外,它现在在他们的文档中列为 QtWidgets。还有什么我需要转换的,还是这个 connect() 问题与其他问题有关?
【问题讨论】:
标签: python-3.x pyqt5 pyqt4 qwidget qtreeview