QtをRubyで扱おう(qtbindings→ruby-qml)
ruby-qml(追記:2015/12/13)
個人としてはこちらをおすすめします。理由はいろいろありますが、下で紹介しているqtbindingsがQtのバージョン4.8にしか対応していないのに対し、ruby-qmlの方はQt5.4以降が利用できるからですかね。ちゃんとしたインストール方法はREADMEに書いてあるので、そちらを参考にどうぞ。
参考:
ずいぶん昔にかいたQtをRubyでつかうqtbindings gemの記事、あんまgemの開発が盛んでないし個人としてはruby-qmlを推したいので記事更新したほうがいい気がしてきた
— 4869 (@sh4869sh) 2015, 12月 13
僕も流行りにのってQtをRubyで使おうとして、qtruby4をインストールしようとしたところ...
$sudo gem install qtruby4 ERROR: Could not find a valid gem 'qtruby4' (>= 0), here is why: Found qtruby4 (2.1.0), but was for platform mswin32
Found qtruby4 (2.1.0), but was for platform mswin32
どうやらqtruby4はWindowsでしか使えないようですね。
どうにかUbuntuできないかなと思い探していたらこんなサイトが
Mac OS X Lionにqtruby4(qtbindings) gemを導入する - ここは匣
LinuxではQTRubyではなくqtbindingsを使うんですね。早速インストールしようとGemfileを編集します。
source "https://rubygems.org" gem "qtbindings","~> 4.8.5.2"
をやり、
$sudo bundle install
としたところこのようなエラーが。
Bundleでqtbindingsをインストールした際に発生したエラー
どうすればいいのかと、qtbindingsのサイトを見たところ...
ここのサイトに必要なものが書いてありました。
- cmake 2.8.x installed and in your path
- QT 4.8.x installed and in your path
- Ruby installed and in your path
- gcc 4.x (or clang for OSX 10.9)
これをインストールするか…という前にqtbindingsのGithubのissueを見ると...
こんなのがありました。これに載っている通り
$sudo apt-get update $sudo apt-get install ruby ruby-dev gem $sudo apt-get install libqt4-gui libqt4-dev cmake $sudo gem install qtbindings
これを実行すると、簡単にインストールすることが出来ました。
で、簡単なQtサンプルを書いてみました(というか載っていた。)
require 'thread' require 'Qt' a = Qt::Application.new(ARGV) hello = Qt::PushButton.new('Hello World!', nil) hello.resize(100, 30) hello.show() a.exec()
これを「require 'thread'」なしで、これを実行しようとするとエラーが。
/var/lib/gems/1.9.1/gems/qtbindings-4.8.5.2/lib/Qt4.rb:30:in `const_missing': uninitialized constant Qt::RubyThreadFix::Queue (NameError) from /var/lib/gems/1.9.1/gems/qtbindings-4.8.5.2/lib/Qt4.rb:30:in `<class:RubyThreadFix>' from /var/lib/gems/1.9.1/gems/qtbindings-4.8.5.2/lib/Qt4.rb:26:in `<module:Qt>' from /var/lib/gems/1.9.1/gems/qtbindings-4.8.5.2/lib/Qt4.rb:25:in `<top (required)>' from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' from /var/lib/gems/1.9.1/gems/qtbindings-4.8.5.2/lib/Qt.rb:1:in `<top (required)>' from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:60:in `require' from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:60:in `rescue in require' from /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:35:in `require' from qt.rb:1:in `<main>'
これは先ほど載せたissueにあるように、次のアップデートで直るようです。
やっと使えるようになりました。これからいろいろいじっていきたいと思います。