こんにちは。田原です。
最初にQtのライセンスの話をしておくべきだったのですが、すっかり失念してましたので簡単に解説します。また元々予定していたMacとLinux(ubuntu)用Qtのインストール方法を詳しく解説します。
1.Qtのライセンスについて
株式会社SRA株式会社SRAのサイトによくまとまった表があります。
ざっくり、「商用ライセンス」と「GPL」です。「GPL」は「LGPL」と「GPL」の2種類でライセンスされています。
以下、要点のみ解説します。
1-1. GPL
かなり有名なオープン・ソース・ライセンスの1つですね。
(1) GPLでライセンスされたプログラム(以下GPLプログラムと呼ぶ)は無償で使って良いです。GPLプログラムの権利者がそのプログラムを誰でも自由に無償で使っていいと許している(=GPLでライセンスしている)のです。権利者が使っていいと言っているので、どうどうと使っていいです。
(2) もちろんGPLプログラムを自分のプログラム(以下マイプログラムと呼ぶ)へ組み込むことも許されています。
ただし制約もあります。(他にも制約はありますが、重要なポイントだけ)
(3) GPLプログラムをビルドしてバイナリ形式で配布する場合、その配布先から「ソース・プログラムをくれ」と言われたら断っては行けません。
(4) そして、(GPLプログラムを組み込んだ)マイプログラムを配布する場合、配布先へGPLでライセンス(=使用許諾)することが要求されています。
(3), (4)を満たせない場合はGPLプログラムを使ってはいけない(使用許諾しない)というのがGPLです。
例えば、GPLでライセンスされているライブラリAがあったとします。あなたがそのライブラリAを組み込んだプログラムBを開発したとします。あなたがプログラムBを自分で使うだけなら完全に自由です。あなたがプログラムBを誰か他の人Cに配布した場合、そのCさんから要求があったら、あなたのプログラムを含むすべてのソース・コードをCさんへ渡すことが必要になります。(それが嫌ならライブラリAを組み込まなければ良いというライセンスです。)
1-2. LGPL
有名なGPLの1つですが、若干「感染力」が弱いライセンスです。詳しくは株式会社SRAのこのページ株式会社SRAのこのページがわかりやすいです。
GPLは「組み込んだら」ソース・コードの提供が必須となります。LGPLは交換可能な方法で組み込むのであればソース・コードの提供は免除されます。
例えば、GPLでライセンスされているライブラリXがあったとします。あなたがそのライブラリXを組み込んだプログラムYを開発したとします。プログラムYを自分で使うだけなら完全に自由です。ライブラリXをプログラムYにダイナミック・リンクしたバイナリを誰か他の人Zに配布した場合、そのZさんから要求があっても、あなたのプログラムYのソース・コードをZさんに提供する必要はありません。(ライセンス表示義務や解析禁止してはいけないなど、いくつかの義務はあります。)
1-3. 商用ライセンス
GPLの義務はない代わりに有償なライセンスです。株式会社SRAやQt Groupがライセンスしています。契約すると技術サポートも受けられるようです。
注意点としては、GPLやLGPLライセンスでQtを使って開発したプログラムを後から「商用ライセンス」へ変更できないことです。Qtを「商用ライセンス」で使ったプログラムを配布したい場合は、開発の当初から「商用ライセンス」を契約しておく必要があるようです。
私は間違わないようできるだけの努力を払っていますが、理解しやすくするために細かい部分をはしょっていますし、私は法律の専門家ではないので間違って理解している可能性もあります。実際にGPLプログラムをあなたのプログラムに組み込んで配布する際には原文にあたることをお勧めします。(GPLv2、GPLv3、LGPLv2.1、LGPLv3)
また、情報処理推進機構(IPA)がGPLv3の解説を公開していますので必要に応じて参考にできると思います。
2.Qtのインストール
手順としては簡単で下記3つです。
- ダウンロードする
- インストールする(Qt Accountを取得する)
- サンプルを1つ走らせてみる
2-1. ダウンロード~Qt Accountの取得(Windows/Mac/Linux共通)
「ダウンロード~Qt Accountを取得する」までの部分は、Windows、Mac、Linuxすべてほぼ同じです。
Windowsについて前回解説していますので、これらについては前回の解説を参照下さい。
「2-1. インストーラをダウンロードする。」~「2-2-1. Qt Accountを取得します。」
2-2. Mac用のインストール手順
2-2-1. インストーラを起動します。
DOCKアイコンの「ダウンロード」からFinderを開いて、.dmgファイルをダブルクリックしてマウント→インストーラをダブルクリックして起動します。
>
以上の操作でインストーラが起動します。起動したら「Next」をクリックして下さい。
先程取得したQt Accountのメール・アドレスとパスワードを入力して再度「Next」をクリックして先へ進めます。
2-2-2. インストール先等を指定しながら進めて下さい。
途中、メタ情報のダウンロード等で数分待たされることがありますが気長に待って下さい。
途中でXcode(Mac用の開発ツール。WindowsのVisutal Studioと同じ位置付けのツールです。)のインストールを求められますので画面の指示に従ってXcodeをインストールして下さい。
Xcodeのインストールが終わったら、Qtのインストールを継続します。
2-2-3. いよいよ具体的にインストールするコンポーネントを選択します。
当講座では最新版(現在はQt 5.15 LTS)のmacOS用のライブラリとQt WebEngineを使います。
またQtのドキュメントは不足している場合もあり、時としてソースを見て詳細を調べることもあります。ですのでディスクスペースに余裕がある時はSourcesもインストールしておくことをお勧め致します。
2-2-4. そのままインストールを進めて下さい。
これでインストール完了です。「終了」をクリックして下さい。残念ながら、QtCreatorは起動しないようです。FinderからQtをインストールしたフォルダを開いて、QtCreatorを起動して下さい。
2-3. Linux(ubuntu)用のインストール手順
Linuxのサンプル用にubuntu 18.04 LTSをVMWare上の仮想PCへインストールしました。これを使って解説します。
2-3-1. インストーラを起動します。
ubuntuの場合、先の手順でダウンロードしたインストーラには実行属性が付いておらず、普通にダブルクリックしても起動しません。そこで、ダウンロードしたフォルダで端末を開き、chmodコマンドで実行属性を付けてから起動します。
以上の操作でインストーラが起動します。起動したら「Next」をクリックして下さい。
先程取得したQt Accountのメール・アドレスとパスワードを入力して再度「Next」をクリックして先へ進めます。
2-3-2. インストール先等を指定しながら進めて下さい。
途中、メタ情報のダウンロード等で数分待たされることがありますが気長に待って下さい。
2-3-3. いよいよ具体的にインストールするコンポーネントを選択します。
当講座では最新版(現在はQt 5.15 LTS)のLinux用のコンパイラ(gcc)やライブラリとQt WebEngineを使います。
またQtのドキュメントは不足している場合もあり、時としてソースを見て詳細を調べることもあります。ですのでディスクスペースに余裕がある時はSourcesもインストールしておくことをお勧め致します。
2-3-4. そのままインストールを進めて下さい。
ubuntuの場合、標準ではWebEingineサンプルをビルドできません。OpenGLのC++用バインディングが標準ではインストールされていないことが原因のようです。
端末を起動して下記コマンドを実行し、必要なlibglbindingをインストールして下さい。
$ sudo apt install apt-file $ sudo apt-file update $ sudo apt install libglbinding-dev
これでインストール完了です。「終了」をクリックして下さい。残念ながら、QtCreatorは起動しないようです。左下のメニューアイコンをクリックして開いた画面からQtCreatorを起動して下さい。
2020年7月5日 修正しました。
ふと気がついたら、5月26日にQt 5.15 LTSがリリースされていました。5.15はLTS(Long Term Suport)ですので3年間ほどは古くならないで済みます。そこで、Qt 5.15へ差し替えさせて頂きました。
2-4.サンプルを1つ走らせてみる(Windows/Mac/Linux共通)
Qtはマルチプラットフォーム対応の開発ツールなので、原則としてアプリ開発手順はすべてのプラットフォームで概ね同じです。(注1)
今回のサンプルも同様ですので、サンプルを走らせるところは前回のWindows向け解説前回のWindows向け解説を参照して下さい。
注1)Qtのマルチプラットフォーム対応について
流石に完全に同じというわけではないです。OSの相違が大きすぎる、使用頻度の少ない機能など共通化できていない部分も多々あります。
とはいえ、それなりに高度に抽象化できていますので、それぞれ別途に開発するのに比べるとはるかに効率的です。
3.最後に
今回はMacとLinux向けのQtを使えるようにするところまで解説してみました。
私の経験的にはWindowsで動作すればかなりの確率でMacでも動作します。
体感的には、OS依存性の低い部分(httpコマンドや一般的なウィンドウ制御)は10回の変更の内9回くらいはそのまま走ります。OS依存性の高い部分(例えばマイクやスピーカを使う、ウィンドウをデフォルトとは異なる方法で表示する)については5回に3回くらいは何らかの変更が必要な感じです。
ところで、最近、高解像度ディスプレイ対応(≒文字の拡大率対応;Windows, Mac)にハマりました。
Windowsの場合はアプリのウィンドウ・サイズが可変ならOSが良しなに制御してくれますが、ウィンドウ・サイズを固定するとあれやこれやとプログラムによる対応が必要になります。Qt Widegtsではアプリ起動後の文字の拡大率変更やディスプレイの接続変更に対応できません。Qt Quickなら対応できますが、定型的な対応方法がなさそうです。コンボボックスでは特に苦労しました。
Macではそのような問題は全くないのですが、タイトルバーを表示せずクライアント領域をドラッグして移動するようなアプリをきちんと開発できる方法が見つかっていません。
これらについても、追々解説していきたいと思います。(Linuxについては良くわかりません。Linuxで高解像度ディスプレイ対応する必要があることはかなりレアでしょうし、そこまでは手を出さない予定です。)
それでは今回はこれで終わります。お疲れさまでした。