読者です 読者をやめる 読者になる 読者になる

Laboratory of Scarlet

メモと所感と技術記事

QtをRubyで扱おう(qtbindings→ruby-qml)

メモ QT Ruby

ruby-qml(追記:2015/12/13)

github.com

個人としてはこちらをおすすめします。理由はいろいろありますが、下で紹介しているqtbindingsがQtのバージョン4.8にしか対応していないのに対し、ruby-qmlの方はQt5.4以降が利用できるからですかね。ちゃんとしたインストール方法はREADMEに書いてあるので、そちらを参考にどうぞ。

参考:


僕も流行りにのって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のサイトを見たところ...

ryanmelt/qtbindings · GitHub

ここのサイトに必要なものが書いてありました。

  1. cmake 2.8.x installed and in your path
  2. QT 4.8.x installed and in your path
  3. Ruby installed and in your path
  4. gcc 4.x (or clang for OSX 10.9)

これをインストールするか…という前にqtbindingsのGithubのissueを見ると...

Ubuntu 13.04: NameError: uninitialized constant Qt::RubyThreadFix::Queue · Issue #69 · ryanmelt/qtbindings · GitHub

こんなのがありました。これに載っている通り

$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にあるように、次のアップデートで直るようです。

やっと使えるようになりました。これからいろいろいじっていきたいと思います。