[Kde-bindings] qtruby crash

Richard Dale richard.j.dale at gmail.com
Fri Mar 16 13:11:10 UTC 2007


On Friday 16 March 2007, Caleb Tennis wrote:
> Found an interesting bug/crash in QtRuby (Qt4).  Check out this code:
>
> -------
>
> require 'Qt4'
>
> class TestClass < Qt::Widget
>   slots 'timeoutSlot()'
>
>   def initialize(parent)
>     super(parent)
>
>     t = Qt::Timer.new(self)
>     connect(t, SIGNAL('timeout()'), self, SLOT('timeoutSlot()'))
>     t.start(1000)
>   end
>
>   def timeoutSlot
>     puts "Got timeout"
>   end
>
> end
>
> class TestClass2 < TestClass
>
>   def initialize(parent)
>     super(parent)
>   end
>
>   def timeoutSlot
>     puts "Overriding the timeout"
>   end
> end
>
> app = Qt::Application.new(ARGV)
> tc = TestClass2.new(nil)
> tc.show
> app.exec
>
> ------
>
> Notice how TestClass2 overrides 'timeoutSlot', but never declares it as a
> slot.
>
> Adding a slot declaration to TestClass2 fixes the crash and the program
> runs like you would expect.
Yes, that is a known problem - slot/signal inheritance is borked. You can
always work round it by redeclaring the slot as you've found. But that was
the main thing I wanted to fix before the next release (as well as getting
qtruby to build with cmake). It needs to be like the equivalent code in the
Qyoto bindings and allocate the QMetaObjects properly for each subclass.

-- Richard



More information about the Kde-bindings mailing list