前回に引き続き今回も参加したので参加報告を記す。また,今回の勉強会では発表したので,それについても記す。

概要

イベント情報
項目 内容
イベント名 Qt 勉強会 @ Tokyo #62
URL https://qt-users.connpass.com/event/97166/
ハッシュタグ #qtjp
主催者 日本Qtユーザー会
開催地 東京都新宿区新宿1-23-1 新宿マルネビル9F
開催日時 2018-08-18 13:00-18:00
参加人数 10
SNS https://social.senooken.jp/conversation/96957
発表資料
項目 内容
演題 Qt Quickでのタブページの実装に手こずった話
スライド https://senooken.jp/public/20180818/slide/
動画 https://senooken.jp/public/20180818/movie/

経緯

前回の勉強会で,今後の自分のアプリケーション開発で必要な要素であるタブページの実装に挑戦した。Qtに用意されている部品を組み合わせるだけだから,きっと簡単にできるのだろうと期待していた。しかし,実際はかなりの試行錯誤が必要であり,しかもバグが残った状態で,不本意な結果となった。

自分が挑戦した限り,ネット上にはQt Quick Controls 2でタブページの実装に挑戦した事例はなかった。そのため,同種の問題の解決の手がかりにするため,また今回遭遇した問題の解消方法を探るために,何をどうやったのか,何が問題だったのかを発表することにした。

内容

発表資料の目次のとおり,以下の内容を話した。

  1. タブページとはどういうものか
  2. Qtでの開発体制
  3. Qt Quick Controls 2での具体的な実装方法
  4. 課題

2. のQtでの開発体制で,Qtの開発パターンを紹介したのは自分の頭の整理にもなった。Qtの勉強を始めた当初,Qt Widgets,Qt Quick,Qt Quick Controlsの関係がイマイチ理解できず,Qt Quick Controlsに関しては,1と2がありややこしかった。Qt 5.11になってQt Quick Controls 1が廃止予定扱いになったこともあり,いいタイミングだったのかもしれない。

タブページの実装では,オブジェクトの動的生成・削除,マウスドラッグなど少し応用的な内容を含んでいる。マウスの現在位置に応じて処理を変える必要があり,意外と複雑だ。

作業内容

今回の勉強会での作業内容は,発表に対するコメントと次の課題であるQt Widgetsでのタブページの実装への着手,資料の収集だった。

発表で課題としたことについて,初参加の方から助言をいただけた。

  • 4.1の座標がおかしくなる問題: 他の処理が干渉しているのではないか?ドラッグだけ有効にして,ドラッグ中は他の機能を無効にしてはどうか?
  • 4.3のQt 5.11で文字が被る問題: Qt 5.10と5.11とでオブジェクトのデフォルト値が変わっているのではないか?例えば,背景の色や透明度が違うなど。
  • TabBarとSwipeViewとで二重にタブページの追加,削除を管理しないといけない件については,このグループを一つのクラスでまとめるという方法がある。

デフォルト値が変わっている件については,背景色を変えたり試してみたが,違いがなく,結局解決の手がかりがつかめなかった。GUIだと,マウスや他の要素が干渉しあっており,再現確認もしにくいのでやっかいだと感じた。

また,幹事のhermit4さんが先日のコミケで「qmake入門増補改訂版」をリリースしており,この勉強会でも展開していたので,1500円で購入した。発表以外での本日最大の作業成果だった。電子版も付属しているのがありがたかった。

その他,いよいよQtの本丸ともいえるQt Widgetsに手を出すことになるので,オライリーの「実践 Qt 4プログラミング」を購入した。「入門 Qt 4 プログラミング」はQtに興味を持った3年前の時点で購入したのだが,実践のほうはまだ早いと思って購入していなかった。Qt 4とバージョンが一つ前なのが気がかりではあるが,Qt WigetsはQt 4でも5でも内容がそんなに大きく変わらないので,Qt 4の本でも通用するらしい。というより,Qt 5のQt Wigetsの本は少なくとも日本語では皆無のため,Qt 4の本にあたるしかないというのが実情だ。

そして,肝心のQt Widgetsのタブページの実装についてだが,QTabWidgetを使えばいけそうというくらいしか情報がなく,Qt Quickでのタブページの実装と同じで,また試行錯誤しながらの挑戦になる。もっとも,今度はC++でのQtの開発方法も勉強する必要があるため,手ごわそうだ。

結論

今回の勉強会では,Qt Quickでのタブページの実装方法について発表できたのが,最大の成果だった。試行錯誤してやっとわかったところでもあるので,なんらかの形で公開できたのはよかった。そうでなければ,努力が報われないまま終わってしまい,後から挑戦する人にももったいないことだろう。

なんとなく感じていたが,Qt QuickはQt 5から登場したのもあり,安定性,応用性に欠けるのではないかという不安がある。Qt WidgetsでQt Quickで挑戦した課題に取り組み,お互いの実装方法を比較して,今後どちらをどう使って開発を進めていくのか検討したい。