Подклассы Ruby и сигналы / слоты Qt не работают вместе, как ожидалось - PullRequest
2 голосов
/ 18 ноября 2008

Когда я пытался работать с механизмами сигналов / слотов 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

Вопрос в том, почему программа не дает ожидаемый результат?

Ответы [ 2 ]

1 голос
/ 02 января 2009

Чтобы иметь возможность использовать сигналы и слоты - или, что более важно, мета-объектную систему в Qt, класс должен наследовать от QObject - и он должен сначала наследовать QObject при множественном наследовании. См. Также http://doc.trolltech.com/4.4/moc.html для хорошего чтения в системе мета-объектов

0 голосов
/ 23 июня 2009

Как отметил Теренс Симпсон, это ошибка, которая все еще присутствовала в Qt Ruby 1.4.9. Тем временем это исправили.

...