Подключение, переподключение слотов к сигналу - может ли это вызвать сбой?

В приложении PyQt4 я подключаю ползунок к тому или иному слоту в зависимости от действий пользователя. Я меняю назначение слотов в ответ на нажатие кнопок. Несколько разных слотов делают разные вещи, слишком разные, чтобы их можно было объединить в один слот с некоторыми операторами «если».

Это приложение часто вылетает. Мне интересно, кошерно ли переназначать слоты на один сигнал на лету вот так. Может ли это привести к висячим указателям внутри 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
       ....

person DarenW    schedule 22.06.2012    source источник


Ответы (1)


Если 2 связанных объекта все еще существуют, когда вы вызываете соединение, это само по себе не должно вызывать сбой.

Согласно вашему коду, вы, похоже, не отключаете ранее подключенные слоты (например, с self.s.valueChanged.disconnect()), и это может привести к тому, что оба слота будут вызываться несколько раз для каждого сигнала, что означает, что ваше приложение может со временем замедлиться, и может вылететь в зависимости от того, что вы делаете в слотах.

person alexisdm    schedule 22.06.2012
comment
Незнание о разъединении() является недостатком моих знаний. Может быть, это так, может быть, это не объясняет сбой, но на следующей неделе я это исправлю и узнаю. - person DarenW; 23.06.2012