🟩

3DCG分野からの Qt/PySide 入門記

2024/12/17に公開

はじめに

この記事は、Qt Advent Calender 2024 の17日目の記事です。

https://qiita.com/advent-calendar/2024/qt

はじめまして、Qt へ入門して1年目の Ndgt と申します。サークル・趣味で3DCGを扱っています。製作においては、Autodesk製品を中心に、たまに Blender や UE を触ります。

DCCツールのプラグインを開発する野望を抱いたのが1年前、つまり Qt と「はじめまして」をしたのが昨年12月末のこと。気付けばもう1年が経ち(早い !)、この間 Qt を使っていくつのツールとプラグインを作成し、そのうちの一つは所属サークルでの製作フローに取り込まれました。周りで Qt を使用する人がほとんどいないのは寂しかったのですが、珍しく自分で新しく取り入れた技術ということで、勉強するのは楽しかったです。布教も含め、この1年間(実質触ったのは半年程度ですが)の Qt への入門の記録を残そうと思います。


Qt との出会い ~ 挫折

前章記載の通り、自分の Qt との出会いは DCCツールのプラグイン作成でした。

alt text
MotionBuilder Developer Help より

このページを見た時の「Q」から始まる2文字の印象は強く、なんとなく「UIを作りたい」と思ったことをきっかけに、Qt への入門を決めました。
ちなみに自分は学生なので、Qt 入門の第一歩は学生ライセンスを申請することでした。確か Qt Edu for Developers を申請したような気がします。

alt text
qt.io より

Qt Maintenance Tool からインストールし、無事 Qt Creator を起動できたのですが、"Licensed product not known" エラーにいきなり見舞われました。ネットでいろいろ検索しても自分にはよく分からなかったのですが、Qt Customer Portal の Support Center に相談したところ、丁寧に対応していただいたことを覚えています。

最初に取り組んだのは、LazyCoding さんによる「Qt Creator, C++ でのGUIアプリケーション開発」でした。Youtube 上では珍しく日本語によるチュートリアルだったので選んだのだと思います。説明はゆっくりで分かりやすく、最初に取り組んだわりには躓くことなく進められたのを覚えています。

やがて、かねての目標の通りプラグインの作成に挑戦し始めました。

alt text
MotionBuilder の Qt プラグインサンプル

ただ、当時、情報の授業を友人の力が無いと乗り切れないほどにプログラミングに慣れておらず、また MotionBuilder のプラグイン作成に関しても知識がほぼ無い状態だったこともあり、Qt を理解することもプラグインを作成することもままならずに挫折し、結局出会ってから数か月は Qt の勉強から遠ざかってしまいました。


Qt 再入門 ~ 挫折克服

4月、友人に感化されて Pythonスクリプティングに真剣に取り組み始め、この1ヵ月間は MotionBuilder のスクリプト作成を必死に続けました。その結果、プログラミングできない自分とは別れを告げることができ、何かしら新たな技術・SDK等の知識を構築する土壌が出来たように思います。

これを機に、一度挫折した Qt にもう一度取り組もうということで PySide に手を出したのでした。仮想環境で python -m pip install PySide6 をするだけで簡単に導入できること、CMake 無しで Widgetアプリケーションが作られることから、今度は挫折することなく Qt を触り続けることができました。

alt text
最初に作ったUI

今思えば、CMake の勉強に非常に苦戦していたことも以前の挫折の要因だったような気がします(CMake 難しい...)。このUIを作った頃は、一度 C++ での開発を諦め、PySide 一本で勉強を進めていきました。非常に単純なUIですが、一度挫折したこともあり作成した当時は嬉しかったのを覚えています。


ツール作成

最初のUIを作ってからほどなくして、各ボタンとソフト側の機能を結び付けて具体的な”ツール”を作ろうという目標ができました。Qt Designer を本格的に触り、また signal と slot をちゃんと実装しようとしたのもこの頃から。MotionBuilderスクリプティングには当時もう慣れていたので、ソフト側での機能の実装には困らなかったのは大きかったです。PCの Pictures フォルダには、当時の学習の足跡が残っていました。

alt text
Qt Desinger 関連のスクショばっかり

一度何かツールを作るとそこからは早く、オリジナルでいくつかツールを作っていきました。
この頃が一番 Qt を使っていて楽しかったです。

alt text
一番最初に作ったツール


alt text
2つ目に作ったツール

ちなみに、MotionBuilder SDK でリストを作ると ScrollBar が付属しないため、要素数が非常に多いとスクロール出来ずに画面外にはみ出します。Python Editor の Font の指定画面とか特にそうですね。今後のアップデートに期待したいところです。

この欠点と、SDKの扱いにくさがあるために、MotionBuilder のツールはどれだけ簡単でも Qt を使いたくなります(上記の問題は Qt の Combobox を使用することで対応できました)。

alt text
3つ目に作ったツール

一番ツールらしい見た目をしているような。下半分は Qt製ではなく MotionBuilder 側のものです(この変な構造のせいで結局開発は続きませんでした)。Group Box を好んで使うようになったのはこの頃からですね。ちなみに左上の欄は歌詞テキストをインポートし、全て平仮名に変換する機能を持っていて、pykakasi モジュールを導入していました。


C++ 再開 ~ Qt勉強会

PySide によるツール作成にも慣れたところで、C++ での開発も再開しました。
PySide と並行して C++ および MotionBuilder プラグインの勉強を進めていた甲斐もあって、ここでも挫折することなく続けられました。いきなり新しく作るのではなく、一度 PySide で作ったツールを C++ で書き直す、という段階を踏んだのも大きかったです。

そして、この頃「Qt勉強会」に初めて参加しました。

alt text
Qt 勉強会 @ Tokyo R #30 にて

技術系のイベントに参加するのは初めてで緊張していたのですが、皆様があたたかく迎えてくださり、とても居心地がよかったです。普段から仕事で開発をされている方と直接お話をし、技術系の仕事の雰囲気を体感できたことは非常に良い経験となりました。8月の参加以来予定が合わずご無沙汰してしまっているので、来年はもっと参加できればと思います。


alt text
勉強会で作成していたツール

alt text

このツールは用途上、FBX SDK・MotionBuilder SDK・vmd形式・Qt の4つの分野が合わさっていて、これまでの知識を総動員して取り組んでいました。Status 表示がお気に入りです。


現在 / 3DCGでの Qt

夏以来サークルでの製作が本格化したことに合わせ、開発の時間がなくなり、サークル内で開発していたツールの保守のみ取り組んでいました。最近少し余裕が出てきたので学習を再開しましたが、やはり時間が空くと諸々忘れてしまいますね。改めて基本から学び直しています。Qt Quick3D や Qt Design Studio をしっかり触ってみたいです。

さて、Qt 単体ではあまり知名度は無いのかもしれませんが、3DCGにおいては PySide としてそこそこの知名度があるような気がします(あくまで私個人の所感です)。特に Autodesk Maya において PySide の資料はネットに結構見つかり、個人で講習会を開いていらっしゃる方もいます。Twitter で「PySide」と検索をかけると、意外にも多くの投稿が見つかりますね。

例えばこんな動画も。
https://www.youtube.com/watch?v=rhtLC5kKoBI

Maya や MotionBuilder, 3dsMax 等の Autodesk 製品のUIがQt製で、ゲーム会社や3DCGスタジオにおける TA(テクニカルアーティスト)さんやプログラマーさんがツール・UI開発でQtを扱うらしく、最近では企業の技術ブログ等でユーザーの目に留まる機会も増えたのではないでしょうか。


おすすめ資料

最後に、おすすめの資料を挙げていきます。

  • Qt for Beginners
    おすすめ公式資料1。Qt の学習に本腰を入れるとき、最初に読みたい資料。Qt の一通りの概念をおさえることができます。

  • Using a Designer UI File in Your C++ Application
    おすすめ公式資料2。Qt Desinger を使って開発を始める前に読みたい資料。Widget のクラスをどのように構成すべきかおさえることができます。自分は Multiple Inheritance Approach が分かりやすくて好きです。

  • KDAB Playlist - Youtube
    KDABさんは「Qt, C++ and OpenGL Experts」で表される通り、C++, Qtに関する多くの資料を公開してくださっています。最近は Qt Widget に関する動画の更新が多いです。

  • Qiita Qt Advent Calender
    Qiita は結構 Qt に関する記事が多いイメージです。Advent Calenderに行けば経験豊富なユーザーの方々の記事がたくさん読めるのでいいですね。

  • 日本 Qt ユーザー会 - Qt関連の書籍
    Qt には日本語の書籍もあります。表紙が可愛い!

  • 実践C++応用講座 Qt 編 - Theolizer
    C++, CMake でもお世話になる Theolizer さんの記事。


おわりに

学習1年目の節目として、初めて Qt Advent Calender に寄稿させていただきました。来年度は今年よりもっと良いものを作れるよう、勉強していきたいと思います。

それではこの記事はここまで。最後までお読みくださりありがとうございました。


P.S. 今回から Zenn CLI を使って書きました。GitHubで記事が管理でき、1モニターで編集とプレビューができて便利ですね。

Discussion