Когда я пытался работать с механизмами сигналов / слотов Qt более чем на одном уровне наследования, я столкнулся с проблемой: когда мой класс не наследуется напрямую от QObject, кажется, что сигналы и слоты больше не работают.
Вывод следующей программы иллюстрирует случай:
require 'Qt'
class A < Qt::Object
signals 'mySignal()'
slots 'mySlot()'
def initialize
super()
puts "This is the c'tor of A and I am a #{self.class}"
connect(self, SIGNAL('mySignal()'), self, SLOT('mySlot()'))
emit mySignal()
end
def mySlot
puts "Signal received and I am a #{self.class}"
end
end
class B < A
def initialize
super()
end
end
app = Qt::Application.new(ARGV)
A.new
B.new
app.exec
Программа дает
This is the c'tor of A and I am a A
Signal received and I am a A
This is the c'tor of A and I am a B
Однако я бы ожидал
This is the c'tor of A and I am a A
Signal received and I am a A
This is the c'tor of A and I am a B
Signal received and I am a B
Qt ' Документация гласит, что в нем "[...] предполагается, что первый унаследованный класс является подклассом QObject." Поскольку B
Вопрос в том, почему программа не дает ожидаемый результат?