qtruby, QUiLoader и response_to? - PullRequest
       10

qtruby, QUiLoader и response_to?

1 голос
/ 02 апреля 2010

Я пишу простое приложение на Qt4 на Ruby (используя qtruby ), чтобы научить себя обоим. В основном все прошло хорошо, но, пытаясь использовать «утки» Руби, я столкнулся с проблемой; respond_to? не похоже на реальность.

irb(main):001:0> require 'rubygems'
=> true
irb(main):002:0> require 'Qt4'
=> true
irb(main):003:0> require 'qtuitools'
=> true
irb(main):004:0> Qt::Application.new(ARGV)
=> #<Qt::Application:0xc3c9a08 objectName="ruby">
irb(main):005:0> file = Qt::File.new("dlg.ui") { open(Qt::File::ReadOnly) }
=> #<Qt::File:0xc2e1748 objectName="">
irb(main):006:0> obj = Qt::UiLoader.new().load(file, nil)
=> #<Qt::Dialog:0xc2bf650 objectName="dlg", x=0, y=0, width=283, height=244>
irb(main):007:0> obj.respond_to?('children')
=> false
irb(main):008:0> obj.respond_to?(:children)
=> false
irb(main):009:0> obj.children
=> [#<Qt::FormInternal::TranslationWatcher:0xc2a1980 objectName="">, ... 

Как вы можете видеть, когда я проверяю, есть ли у объекта, который я получаю после загрузки файла пользовательского интерфейса, доступ к children, я получаю false. Однако, если вызвать этот метод доступа, я получу массив, а не NoMethodError.

Итак, это ошибка или я неправильно понял respond_to??

Это похоже на проблему, описанную здесь , но я подумал, что получу экспертное заключение, прежде чем сообщать об ошибке в проекте.

1 Ответ

1 голос
/ 23 сентября 2010

Я только что посмотрел на код qtruby, который отображает код Ruby на QT, и они используют исключительно method_missing без реализации response_to ?. Таким образом, это похоже на проблему, с которой вы связаны. Я немного поработал над этим, используя obj.is_a? (Например, Qt :: Widget), который, очевидно, не является утилитой, но в некоторых ситуациях хорошо работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...