Qt勉強したメモ
前口上
世の中自粛ムードですね。自分は引きこもりだと思っていたのに運動の重要性に気づき最近よく散歩しています。
世のあらゆる学習コースが無料化、セール実施中! 外出の予定も減るので勉強がはかどりますね。子供がいるご家庭は大変のようですが。
さて、年がら年中セールをやっているUdemyですが、GWのタイミングでセールをやっていました。その中でQtの講座、 Qt Quick and QML For Beginners : The Fundamentalsを受けたので以下メモです。
Qtとは
スマホでなくデスクトップのネイティブアプリを書く場合、WindowsならVisual StudioでC++やC#を使って開発、MacOSならObjective-C、Swiftを使って開発するのがメジャー。iOSやAndoroid開発の場合それぞれSwiftやKotlinを使って開発するのと同じ。
スマホのアプリではReact Native, Xamarin, Flutterなど1度書けばどちらでも動く(程度の差あり)クロスプラットフォームツールがあり、デスクトップ開発におけるその位置付けにいるのがQtやUno Platform.
Qtは3dsMax, FireAlpaca, Krita, Kindle, Kobo, VLC media player, Wiresharkなどで使われており、事例が豊富(参考)
Qtのライセンス
かつてQtのライセンスは商用とGPLの2つだけでした。商用に使いたいならライセンスを買ってね。無料の範囲でも開発できるがGPL汚染を受ける。商用のライセンスは現在は$3950/year. 昔はもっと高かった気がします(要出典
2009年に方針転換。LGPLも適用可能になり、無料の範囲でも開発しやすく。現在はスタートアップや個人開発者向けに499 USD/yearの特例もあるようです。ちなみにPyQTはGPL
最近のQt事情
Qtは基本的にC++で開発するのが主流でした。最新のバージョンではQML(Qt Modeling Language)が使え、UIや簡単なロジックをJavaScriptだけで書くことが可能。さらにQt QuickというUIフレームワークもできある程度のウィジェットはフレームワークに同梱に。
また元のターゲットはデスクトップや組み込みが主流でしたが、スマホ向けやWebAssemblyにもビルド可能になっています。
Udemyの講座
Udemyの講座もQMLやQt Quickベースで基本JavaScriptのレイヤーが解説範囲です。目次は以下
- Introduction
- Dissecting the QML Syntax
- Qt Quick Basic Elements
- Signals and Slots
- User Input Elements
- Working with Javascript
- Qt Quick Positioning
- Qt and Qt Quick on Mobile Devices
- Qt Quick Controls
- Dialogs
- Models Views and Delegates
- Transforms, Transitions and Animations
- Networking
- Storage
- Best Practices+BONUS
アニメーションのイージングまで組み込まれているのはすごいですね。
Qtの特徴にシグナルとスロットがあり、ボタンを押した時のイベントの発火とそれの受け取りをケーブルのように繋いでいくことが可能。少し古いですが2015年のPyConでもこの機能をフル活用した発表がありました。
よかったこと、わるかったこと
iOS, Androidの講座を受けた時にも感じましたが、クライアント側でGUIがからむものは書籍より動画の方がぐっとわかりやすいですね。
一方で、講座の内容がJavaScriptメインであり、C++をフル活用したガチめの設計やサンプルプロジェクトはなかったので残念。オープンソースのプロジェクトも多いのでそっちを参考にしたりですかね。後は少し前の技術書典でそこらへんの設計について書かれた本が出ていました。
Qtの将来性
Wikipediaの記事を見てもわかりますが、買収などにより運営元(親会社)が何度か変わっています。
新型コロナウイルスのあおりで新バージョンは商用ライセンスのみに提供することを検討中というニュースもあり、会社の経営余力はそんなにないのかもしれません。
React Native for WindowsにMacが増えたり、GitHubの買収なんかを見ると、Microsoftがテコ入れし始めれば状況も変わるのではないかと個人的には思っています。
Future Works
- Xamarin
- React Native
- Electron