qtruby problems

M

Martin DeMello

I have both qtruby and qt4-qtruby installed (via the gentoo ebuilds),
and am trying to run the examples from qt4-qtruby-1.4.7. However, most
of them are failing with "Unresolved constructor call". Here's a
minimal failure case:

irb(main):001:0> require 'Qt'
=> true
irb(main):002:0> app = Qt::Application.new([])
=> #<Qt::Application:0xb6a24bec name="irb">
irb(main):003:0> button = Qt::pushButton.new("hello world")
ArgumentError: unresolved constructor call Qt::pushButton

from /usr/lib/ruby/site_ruby/1.8/Qt/qtruby.rb:1367:in `initialize'
from /usr/lib/ruby/site_ruby/1.8/Qt/qtruby.rb:1367:in `call'
from /usr/lib/ruby/site_ruby/1.8/Qt/qtruby.rb:1367:in `try_initialize'
from /usr/lib/ruby/site_ruby/1.8/Qt/qtruby.rb:1366:in `catch'
from /usr/lib/ruby/site_ruby/1.8/Qt/qtruby.rb:1366:in `try_initialize'
from (irb):3:in `new'
from (irb):3

martin
 
R

richard.j.dale

Martin said:
I have both qtruby and qt4-qtruby installed (via the gentoo ebuilds),
and am trying to run the examples from qt4-qtruby-1.4.7. However, most
of them are failing with "Unresolved constructor call". Here's a
minimal failure case:

irb(main):001:0> require 'Qt'
=> true
irb(main):002:0> app = Qt::Application.new([])
=> #<Qt::Application:0xb6a24bec name="irb">
irb(main):003:0> button = Qt::pushButton.new("hello world")
ArgumentError: unresolved constructor call Qt::pushButton

from /usr/lib/ruby/site_ruby/1.8/Qt/qtruby.rb:1367:in `initialize'
from /usr/lib/ruby/site_ruby/1.8/Qt/qtruby.rb:1367:in `call'
from /usr/lib/ruby/site_ruby/1.8/Qt/qtruby.rb:1367:in `try_initialize'
from /usr/lib/ruby/site_ruby/1.8/Qt/qtruby.rb:1366:in `catch'
from /usr/lib/ruby/site_ruby/1.8/Qt/qtruby.rb:1366:in `try_initialize'
from (irb):3:in `new'
from (irb):3
It's because you're picking up the Qt3 version of QtRuby which doesn't
have that constructor. If you install the Qt3 version after the Qt4
version the default when you do a require 'Qt' will be the Qt3 one. If
you install the Qt4 version of QtRuby after the Qt3 one, then the
default is Qt4 instead. Maybe use require 'Qt3' or require 'Qt4' to
make sure you get the right one.

In the Qt4 version 'qtruby.rb' was renamed 'qtruby4.rb', and so it is
easy to see from the trace above what went wrong.

-- Richard
 
M

Martin DeMello

It's because you're picking up the Qt3 version of QtRuby which doesn't
have that constructor. If you install the Qt3 version after the Qt4
version the default when you do a require 'Qt' will be the Qt3 one. If
you install the Qt4 version of QtRuby after the Qt3 one, then the
default is Qt4 instead. Maybe use require 'Qt3' or require 'Qt4' to
make sure you get the right one.

Thanks! requiring 'Qt4' fixed it. How do I make Qt go back to defaulting to Qt4?

martin
 
C

Caleb Tennis

Thanks! requiring 'Qt4' fixed it. How do I make Qt go back to
defaulting to Qt4?

I *think* this is a result of whichever you emerged last. If you
emerged Qt3 after Qt4, then require 'Qt' pulls it in instead.

I recommend just using 'Qt4' or 'Qt3' explicitly. Also you can check
via Qt::version to see which one is loaded.

Caleb
 
R

richard.j.dale

Martin said:
Thanks! requiring 'Qt4' fixed it. How do I make Qt go back to defaulting to Qt4?
Reinstall the Qt4 version of QtRuby so that the Qt.rb file from that
release replaces the current one.

-- Richard
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top