【问题标题】:Should I use Qt Signal or Event?我应该使用 Qt 信号还是事件?
【发布时间】:2020-10-21 19:24:40
【问题描述】:

我正在使用 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()

【问题讨论】:

  • 如果您使用线程,信号是一个不错的选择,信号可以在线程中发出并更改视图小部件

标签: python pyside2


【解决方案1】:

在这里,您可以阅读信号和事件之间的比较,并决定什么适合您 https://www.learnpyqt.com/courses/start/signals-slots-events/ 我相信你最好使用 single 和 slots 来解决这个问题,但这是你的选择

希望这能帮助您做出决定,祝您有美好的一天。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多