Notes C API & C++11+ & ReactiveX & Qt #5 ~ Qtの翻訳システム

前回はmain.cppとNotes C APIのアラインメントについてお話ししました。今回はQtのアプリケーションとしての仕組みについて、サクッとご紹介します。

main.cppのmain関数が呼び出された直後に、次のような記述があります。

QCoreApplication app(argc, argv);

一般的に、コンソールベースのアプリケーションを作成する場合、Qtではこの「QCoreApplication」クラスのインスタンスを生成して初期化します。QtではGUIアプリケーションも作成できますが、その場合は「QApplication」で同様の処理をします。面白いのは、ネイティブWindowsアプリのエントリポイントである「WinMain」を、C/C++であっても一切コーディングしないことです。もちろん、その辺はQtがうまく隠しています。

話をQCoreApplicationに戻します。このオブジェクトを使うと、アプリケーション開発に有益ないくつかの仕組みを提供してくれます。Qtのドキュメントを参考にすると、以下のようになります。

  1. イベントループとイベントハンドリング
  2. アプリケーションとライブラリのパス
  3. 国際化と翻訳システム
  4. コマンドライン引数へのアクセス
  5. ロケール設定

コンソールベースのアプリケーションでは、特に「コマンドライン引数へのアクセス」は重宝します。ヘルプ表示とバージョン表示についてはすでに仕組みを持っており、必須引数やオプション引数についても簡単に登録できるようになっています。

コマンドラインへのアクセスは、QCoreApplication::arguments()からアクセスすることもできますが、より便利に使いたいのであれば、QCommandLineParserを使うといいでしょう。ソースコードで出てきた折に改めて触れたいと思います。

個人的によく使うのは「翻訳システム」です。Qtはソースコードにマルチバイト文字を書きにくいんですが、そもそもC/C++のマルチバイト文字の扱いはコンパイラ依存が大きいため、マルチプラットフォームのQtにしてみれば厄介な問題なのかもしれません。その一方で、翻訳機能が充実していて、LinguistというGUIツールもあります。対応言語が多いアプリを作れるというのは魅力的ですし、それを励みに、可能な限り翻訳システムを使うようにしています。

Qtの翻訳システムの流れは、おおよそ以下のようになります。

f:id:takahide-kondoh:20181031222818p:plain

lupdate、lreleaseはコマンドラインツール、LinguistはGUIアプリです。コンパイルのくだりで、もう少し細かく紹介します。

Qtの翻訳システムについては、以下の本がとても役に立ちました。前バージョンのQt4の本ですが、Qt5でも通じる基本から応用までを網羅しています。

入門 Qt 4 プログラミング

入門 Qt 4 プログラミング

なお、前出のQCommandLineParserは、Qt5.2からの実装なので掲載されていません。あしからず。 (続く)