2013-03-23 32 views
12

Platformę:QtRuby emitują nie działa

Darwin * - * s-MacBook-Pro.local 11.4.2 Darwin Kernel wersja 11.4.2: Czw 23 sierpnia 16:25:48 PDT 2012; główny: xnu-1699.32.7 ~ 1/RELEASE_X86_64 x86_64

Ruby:

rubin 2.0.0p0 (24.02.2013 wersja 39474) [x86_64-darwin11.4.2] (zainstalowany przez RVM)

Qt:

qt: stabilny 4.8.4 (bOT tled), HEAD

Kod:

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 

Wyjście:

connecting signal and slot 
sending signal 

Wyjście z Qt.debug_level = Qt :: poziomdebugowania :: Wysoka

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 

Wygląda na to, że emitent nic nie robi. Próbowałem również ponownie zainstalować qt i qtbindings, ale problem nadal istnieje. A także próbowałem PyQt z sygnałem i gniazdem na tej samej maszynie, działa jak urok.

Czy ktoś ma jakieś pomysły na ten temat? Czy to błąd rubbistycznego qtbindingu, czy po prostu zrobiłem coś nie tak?

+0

Wydaje się, że błąd ruby ​​ruby-2.0.0-p0, qtbindings nie działa dobrze w tej wersji. Próbowałem ruby-1.9.3-p392 na tej samej maszynie, to działa. – user2201409

+0

działa dla mnie z qtbindings 4.8.5.2 i ruby ​​2.0.0p247 (2013-06-27 rewizja 41674) [i686-linux] –

+0

Twój kod działa na Ubuntu 15.10 z qtbindings 4.8.6. – bogl

Odpowiedz

0

Kod wydaje się być poprawny. Problem przejawia się jedynie w szczególnej kombinacji rubinów i qtbindingu, które są obecnie przestarzałe.

0

Zazwyczaj należy uruchomić pętlę zdarzeń Qt, zanim możliwe będzie niezawodne dostarczenie sygnałów. Nie widzę tego w twoim kodzie. Dokładniej, brakuje mi:

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