当试图在多个继承级别上使用Qt的信号/插槽机制时,我遇到了一个问题:当我的类没有直接从QObject继承时,信号和插槽似乎不再起作用了。 / p>
以下程序的输出说明了这种情况:
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'documentation表示,它“[...]假设第一个继承的类是QObject的子类。”由于B < A&lt; QObject,我希望这是真的。 相应的C ++程序按预期运行(尽管你不能在c ++中识别它的c'tor中的对象类型,但除了这一点之外)。
问题是:为什么程序没有给出预期的输出?
答案 0 :(得分:1)
为了能够利用信号和插槽 - 或者更重要的是Qt中的元对象系统,该类必须从QObject继承 - 并且它必须首先在多重继承中继承QObject。另请参阅http://doc.trolltech.com/4.4/moc.html以获得有关元对象系统的良好读数
答案 1 :(得分:0)
正如Terence Simpson所指出的,这是一个仍然存在于Qt Ruby 1.4.9中的错误。它在此期间得到了解决。