【问题标题】:Connecting, Reconnecting slots to a signal - Can this cause a crash?连接、重新连接插槽到信号 - 这会导致崩溃吗?
【发布时间】:2012-06-22 19:07:23
【问题描述】:

在 PyQt4 应用程序中,我根据用户操作将滑块连接到一个或另一个插槽。我更改插槽分配以响应按钮单击。几个不同的槽做不同的事情,太不同了,不能用一些“if”语句合并到一个槽中。

此应用经常崩溃。我想知道像这样动态地将插槽重新分配给一个信号是否符合规定。这是否会导致 PyQt4 内部的指针悬空、内存损坏或其他不良情况?如果我做的没问题,我会在别处寻找错误。

这是我的应用程序的一个非常草图的版本:

def MyThing(QWidget):

    (in some approprate place)
       self.s = QSlider()


    def MethodOne(self):   # this is a slot handling a button click
       self.s.valueChanged.connect(self.someslot1)

    def MethodTwo(self):   # likewise
       self.s.valueChanged.connect(self.someslot2)

    def someslot1(self, svalue):  # slider movement handler
       (compute, show info based on slider position)

    def someslot2(self, svalue):   # similar to someslot1
       ....

【问题讨论】:

    标签: pyqt4 signals-slots


    【解决方案1】:

    如果调用 connect 时 2 个连接的对象仍然存在,则它本身不会导致崩溃。

    根据您的代码,您似乎没有断开先前连接的插槽(例如self.s.valueChanged.disconnect()),这可能导致每个信号都多次调用两个插槽,这意味着您的应用程序可能会变慢随着时间的推移,可能会崩溃,具体取决于您在插槽中执行的操作。

    【讨论】:

    • 不知道 disconnect() 是我知识的缺陷。也许确实如此,也许它不能解释崩溃,但下周我会解决这个问题并找出答案。
    猜你喜欢
    • 2014-03-27
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    相关资源
    最近更新 更多