首页 > 解决方案 > 我应该使用 Qt 信号还是事件?

问题描述

我正在使用 PySide2 并不清楚SignalEvent

如果我们有两个人在做两个View。

人 A正在做ListView

人 B正在做ParameterView

选择ListItem时,更新ParameterView

我应该如何连接它们?使用信号还是事件

也许我会有另一个View,它也需要更新,而ListItem selectChanged


信号

class ListView(QListView):
    # do something

class ParameterView(QWidget):
    def update(self):
        # do something

list_view = ListView()
parameter_view = ParameterView()
list_view.selectChanged.connect(parameter_view.update)

事件

class ListView(QListView):
    def selectChanged(self):
        QApplication.sendEvent(self, SelectChangedEvent)

class SelectChangedEvent(QEvent):
    # initialize ...

class ParameterView(QWidget):
    def update(self):
        # do something

    def event(self, event):
        if event.type() == SelectChangedEvent:
            self.update()

在此处输入图像描述

标签: pythonpyside2

解决方案


这两个选项都是有效的,因为它们使用相同的机制来传输信息,但最大的区别是,如果您想发送 QEvent,那么您必须访问该空间中的对象,而不是使用 Qt 信号,您不应该知道该空间中的对象空间,但仅在连接中。

我的建议是信号应该用于解耦类。我建议你阅读:


推荐阅读