Qt 勉強会 #10 @Tokyo 開催しました
2014年4月19日(土曜日)に Qt 勉強会 #10 @Tokyo を 株式会社 PTP さんのミーティングルームで開催しました。
東京は Qt 勉強会と名称を変更してから第10回という節目の開催で、関西でも数年ぶりに Qt 勉強会が開催されました。いやぁ、おめでたい。
自己紹介タイム
10人くらい集まったところで開始しました。春なので?「最近忙しくてなかなか来れませんでした」という方が多かったですね。
困ったときの Qt @ Tokyo
FireAlpaca の開発者の方から Qt 5 への移行に関していくつかの質問がありました。
macdeployqt が動かない
Qt 5 にしたら macdeployqt がなんか動かないということでした。
元々 Qt 5.0 あたりで macdeployqt が盛大に壊れていて、Qt QuickではじめるクロスプラットフォームUIプログラミング のレビューの際に結構 @IoriAYANE さんと四苦八苦した経験があります。この本の最後の方のデプロイのところを読んでもらえるとその辺が書いてあったはずなんですが、さすがにもうまともに動くようになってるだろうなーと思ってました。
で、色々試行錯誤の末なんとか動いたようで、具体的になにが原因だったのかはわからなかったのですが、
- アプリケーション名.app の「アプリケーション名」の部分を変えたら動かなくなる
- 一度失敗すると二度目以降は動かなくなる
あたりが問題だったようです。
1. の方は .app 以下の Contents/MacOS/ に実行バイナリがあるのですがそこの名前と合わせてあげることで解決します。
この処理は qttools の中の src/macdeployqt/shared/shared.cpp のこのあたり で行われていて、macdeployqt に引数で渡した .app のベースネームしか探していないという実装になっています。
もう少し親切なエラーメッセージを出してあげるとハマらずに済む気がしますし、お目当てのファイルがなかった場合には、そのディレクトリを走査してバイナリを探すみたいな処理を追加してあげれば改善できそうですね。
2. の方は一度 .app を rm なりで消してあげて、もう一度 make をしなおす必要があるということでした。
pthread を使いたい
OpenMP を使っていた部分が Qt 5 では動かなくなったということで pthread を使うにはどうしたらいいのか? Qt 的には QThread を使えばいいの?という質問でした。
一般的には「QThread を使って下さい」でいいと思いますが、今回のユースケースではもう少し高レベルな API である QtConcurrent を使うとより幸せになれる感じでした。
QtConcurrent の API を使うと、パラメータの一覧を API に渡すだけで、利用可能なスレッド数を自動判別して、そのスレッド数で順次処理をして、全部の処理が終わったらシグナルが出て、結果の一覧が返ってくる、みたいな処理がとっても簡単にできるので興味のある方は遊んでみるといいと思います。
実行時にデバッグメッセージが表示されるのが気になる
一つは QML のデバッグが有効になっている時に出る警告で、Qt Creator の中のビルドの設定の qmake の設定のところで QML のデバッグの有無にチェックが入っているのが原因です。
あとは plist とか QuickTime のプラグインとかでも出るとのことでしたが、その辺はよく分かりませんでした。
Windows でも “QSslSocket: cannot resolve TLSv1_1_client_method” のような警告が表示されるとのことでした。
Mac で一文字のショートカットが効かない
X などの文字をショートカットとして使っていたコードが Qt 5 にしたら動かなくなったそうです。
詳細は忘れてしまいました。なんとなく使い方を変えると動くようにできそうな気がしますが、Qt 4 では動いていたようなので Qt 5 の問題かもしれません。
windeployqt?
Windows には macdeployqt みたいなものはないの?という質問でした。Qt 5.2 からは windeployqt.exe というのがあるみたいですね。
Qt Developer Day Tokyo 2014 の準備?
OSC などのイベントに Qt ユーザー会として出展する際に色々必要なものをそろそろ揃えましょうということで、パンフレットやテーブルクロスなどの話し合いをしました。
Raspberry Pi 向けの HTML5 のプラットフォームを Qt で構築する
飛び入り参加の @masap さんによる発表がありました。
組み込み屋さんは UI を作るのが苦手なので、そこは得意な人にお任せできるように HTML からハードウェアを制御するような仕組みを作ったよ!というか、Qt の WebKit にはそういう仕組みがあるので簡単に作れるよ!というお話でした。
Raspberry Pi に Qt(4) をインストールして、QtWebKit の QWebFrame::addToJavaScriptWindowObject というメソッドを呼ぶだけで簡単に JavaScript から C++ のコードを実行できるようになるとのことで、実際に JavaScript から LCD パネルの表示文字を変えるデモや、PS3 のコントローラを HTML5 で使えるようにしたデモなどを見せてくれました。
QtWebKit の C++ と JavaScript 連携の詳細は The QtWebKit Bridge というドキュメントに書かれているので興味のある方は是非ご覧下さい。
また、来月発売の日経Linuxにこの記事を書いたということなので皆さん買って試してみましょう!
qleap のコンパイルが通らない
https://github.com/nobo66/qleap/tree/windows のビルドが Linux で通らなくて困っているということで色々調べた結果よく分からなかりませんでした。
コンパイルオプションに -fno-rtti を追加したら通るようになったようですが、なんでだろう?
qleap は確か自分で試したときもそんな感じで動かなかったので、自分で Qt/Quick で動くようにプラグインを書いてしまったので、git://git.qt-users.jp/codereview/qmlplugins/qtleap.git も試してみるといいと思います。
まとめ
適当にお菓子を食べながら Qt で何かを開発したり、Qt の分からないことをみんなで解決したり、Qt の普及のための作戦を練ったり、Qt を使ってる人同士で交流したりと、とても有意義な勉強会だったと思います。