2013-03-23 2 views
12

платформы:QtRuby испускают не работает

Дарвин * - * s-MacBook-Pro.local 11.4.2 Darwin Kernel Version 11.4.2: Чт 23 августа 16:25:48 PDT 2012; корень: XNU-1699.32.7 ~ 1/RELEASE_X86_64 x86_64

Рубин:

рубинового 2.0.0p0 (2013-02-24 редакция 39474) [x86_64-darwin11.4.2] (установлен от РВМ)

Qt:

кварты: стабильный 4.8.4 (СЭП щество), HEAD

Код:

require 'Qt' 

class Foo < Qt::Object 

    signals :my_signal #also tried 'my_signal()' 
    slots 'my_slot()' 

    def initialize(parent = nil) 
     super(parent) 

     puts "connecting signal and slot" 
     Qt::Object.connect(self, SIGNAL('my_signal()'), self, SLOT('my_slot()')) 
     # also tried => connect(self, SIGNAL('my_signal()'), self, SLOT('my_slot()')) 

    end 

    def emit_my_signal 
     puts "sending signal" 
     emit my_signal 
    end 

    def my_slot 
     puts "received message from signal" 
    end 
end 


o = Foo.new 
o.emit_my_signal 

Выход:

connecting signal and slot 
sending signal 

Выход с Qt.debug_level = Qt :: DebugLevel :: High

Munged method names: 
     QObject$ 
     QObject? 
     QObject# 
candidate list: 
    QObject* QObject::QObject(QObject*) (smoke: 0 index: 3804) 
matching => smoke: 0 index: 3804 
     QObject* (u) score: 2 
     match => smoke: 0 index: 3804 score: 2 chosen: 3804 
setCurrentMethod(smokeList index: 0, meth index: 3804) 
connecting signal and slot 
Searching for QObject#connect 
Munged method names: 
     connect#$#$ 
candidate list: 
    static bool QObject::connect(const QObject*, const char*, const QObject*, const char*) (smoke: 0 index: 3850) 
matching => smoke: 0 index: 3850 
     const QObject* (QObject) score: 3 
     const char* (s) score: 1 
     const QObject* (QObject) score: 3 
     const char* (s) score: 1 
     match => smoke: 0 index: 3850 score: 8 chosen: 3850 
setCurrentMethod(smokeList index: 0, meth index: 3850) 
sending signal 

похоже испускать не делает ничего. Я также попытался переустановить qt и qtbindings, но проблема все еще существует. А также я попробовал PyQt с сигналом и слотом на одной машине, он работает как шарм.

Есть ли у кого-нибудь идеи об этом? Является ли это ошибкой ruby ​​qtbindings или я просто что-то не так?

+0

Кажется, ошибка для ruby ​​ruby-2.0.0-p0, qtbindings не очень хорошо работает с этой версией. Я попробовал ruby-1.9.3-p392 на той же машине, он работает. – user2201409

+0

работает для меня с qtbindings 4.8.5.2 и ruby ​​2.0.0p247 (исправление 2013-06-27 41674) [i686-linux] –

+0

Ваш код работает с Ubuntu 15.10 с qtbindings 4.8.6. – bogl

ответ

0

Код верный. Проблема проявилась только в определенной комбинации рубиновых и qtbindings-версий, которые теперь устарели.

0

Как правило, необходимо запустить цикл событий Qt, прежде чем любые сигналы могут быть надежно доставлены. Я не вижу этого в вашем коде. В частности, мне не хватает:

app = Qt::Application.new(ARGV) 
app.exec