まず、大文字と小文字を区別するファイルシステムを使用しており、互換性の理由から、正しい大文字と小文字を使用することをお勧めするため、システムを変更require 'qt'
する必要がありました。require 'Qt'
スクリプトを実行できるようになると、スタック トレースは実際にはSystemStackError
提供されたメッセージにすぎないことがわかりました。だから私は少し周りを見回して、ここで便利なスニペットを見つけました:(Ruby 2.2ではこれはもう必要ないようですが、今はインストールしていないので、試してみませんでした)
set_trace_func proc {
|event, file, line, id, binding, classname|
if event == "call" && caller_locations.length > 500
fail "stack level too deep"
end
}
アプリを実行する前にこれをどこかに追加すると、スタック トレースがより便利になります。
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:2531:in `debug_level'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:2714:in `do_method_missing'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:2711:in `do_method_missing'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:2667:in `do_method_missing'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:469:in `method_missing'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:469:in `qt_metacall'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:469:in `method_missing'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:469:in `qt_metacall'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:469:in `method_missing'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:469:in `qt_metacall'
from /usr/lib/ruby/vendor_ruby/2.1.0/Qt/qtruby4.rb:469:in `method_missing'
そのため、どういうわけか、存在しないメソッドを呼び出す無限ループに陥りました (したがって、スタック レベルが深すぎます)。
問題を解決できませんでしたが、いくつかの方法が不足しているようです。on_clicked_uAuth()
どこにも宣言が表示されずquit()
、そのような方法でアクセスできるかどうかもわかりませんSLOT
。
更新:SLOT
問題は呼び出しであると確信しています。たとえば、これは完全に正常に機能します。
connect(exit, SIGNAL(:clicked)) { puts "Hello world." }
ここでの問題は、それが実装されているのではなく、アプリケーションにquit
実装されていることです。QtWidget
ただし、ウィンドウを閉じるだけで、開いているウィンドウがなくなると、デフォルトでアプリケーションが終了します。
connect(exit, SIGNAL(:clicked)) { close() }