当尝试在多个继承级别上使用 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
该程序产生
这是A的c'tor,我是A 收到信号,我是 A 这是A的c'tor,我是B
但是,我希望
这是A的c'tor,我是A 收到信号,我是 A 这是A的c'tor,我是B 收到信号,我是 B
Qt 的文档指出,它“[...] 假定第一个继承的类是QObject 的子类。”。由于 B < A < QObject,我希望这是真的。相应的 C++ 程序按预期运行(尽管您无法在 c++ 中识别对象的 c'tor 中的类型,但这不是这里的重点)。
问题是:为什么程序没有给出预期的输出?