実践C++応用講座Qt編 【無料】
C++用のGUI開発ツール
マルチ・プラットフォームなプログラミング言語としては、C++はある意味無敵に近いです。(対抗はC言語だけですが、C++はCプログラムもほぼコンパイルできます)しかし、ディスプレイがないようなコンピュータにも対応していることが最大の要因と思いますが、標準ではGUI開発に全く対応していません。
アプリのコア部をC++で開発し、GUI部をGUI開発が得意なツールで開発することが考えられるのですが、これが意外にたいへんです。私はC#でGUIを作り高速な応答性能が必要な部分をC++で開発したことがあります。これはこれで良いソリューションと思うのですが、Windows限定です。またC#とC++間のインタフェースが結構たいへんでした。
ですので、C++と相性の良いマルチ・プラットフォームなGUI開発ツールが欲しいです。
どの開発ツールがメジャーなのか?
私は3年ほど前に調べて当時はQtがベストと判断してQtを使っています。
では、今はどうなのか? Wikipediaのウィジェット・ツールキットにあるC/C++用のクロスプラットフォーム用ツールの内、stackoverflowでタグを見つけることができたものについて調べてみました。
結果は圧倒的にQtでした。Qtは歴史的(寿命の長い)なツールですので細々と問題を感じる場面もありますが、現時点では最強のツールのようです。本講座も「Qt編」としてQtを解説しようと思います。
開発ツール | 質問数(1) | Windows | Linux | Mac | Android | iOS |
---|---|---|---|---|---|---|
Qt | 73,993 | ○ | ○ | ○ | ○ | ○ |
GTK(2) | 10,270 | ○ | ○ | ○ | ||
wxWidgets | 3,426 | ○ | ○ | ○ | ||
TK | 1,984 | ○ | ○ | ○ | ||
FLTK | 361 | ○ | ○ | ○ | ||
Juce | 173 | ○ | ○ | ○ | ||
GLUI | 24 | ○ | ○ | |||
FOX toolkit | 3 | ○ | ○ |
(1)質問数は、stackoberflowの各言語タグの質問数(2020年3月1日)
(2)GTKはGTK2, GTK3の質問数も合算しています。
ターゲット・プラットフォーム
Qtはさまざまなプラットフォームに対応しています。全部を使って解説するのはそもそも不可能なのでどこまでやるのか結構悩みました。
困った時のシェアというとで、stackoverflowの質問数をチェックしてみました。
Androidはすごいですね。う~~ん、でもAndroid開発はかなり前に少しやったしただけなので当面は保留します。
次点のiOSは最近少し触ってますが無償の範囲では中途半端なのでやはり当面は保留します。
linuxをメインにした方が良さそうですが、実は私はlinuxでQtを使ったことがないので主にWindowsで解説し、マルチプラットフォームらしさを多少なりと掴めるようlinuxやMacで時々サンプルを動かしてみようと思います。
プラットフォーム | 質問数(3) |
---|---|
android | 1,261,930 |
ios | 625,327 |
linux | 187,053 |
windows | 138,753 |
macos | 98,065 |
(3)質問数は、stackoberflowの各言語タグの質問数(2020年4月4日)
投稿リスト
最近は本業が忙しくてなかなか時間が取れないため、概ね第一日曜日の夜に更新する予定です。
以下は、解説記事の日付順のリストです。(アイキャッチ付きの逆順リストはこちらです。)
- 第1回 Visual Studio 2019 CommunityとQtを準備する
- 第2回 Qtのライセンス概説とMac・Linux用のQtの準備
- 第3回 2つのGUI開発要フレームワーク(Qt WidgetsとQt Quick)
- 第4回 QMLで記述したウィンドウをC++から制御する
- 第5回 *deployqtで必要なQtライブラリを集める
- 第6回 Qtの重要な仕組みSignalとSlot
- 第7回 Qtの重要な仕組みSignalとSlot(スレッド編1)
- 第8回 Qtの重要な仕組みSignalとSlot(スレッド編2)
- 第9回 しばしお休みします
最後にちょっと宣伝させて下さい。
セオライド テクノロジーでは高速・高生産性なC++の生産性を更に高める開発ツールTheolizer®を開発しています。時間を確保出来ずなかなかスムーズに開発が進んでいませんが、Theolizerを使って C#からC++のクラス情報をやり取りし、かつ、メンバ関数を呼び出せるような C# 連携機能も開発中です。ご期待下さい。