電子書籍(epub)作成ツール「LeME」はQtで作ってます

 先日、リリースしたLeMEですが、いつものようにQtで作りました。
 ソースは今のところオープンにしていないですし、オープンになってても実際に中身を見てみようと思う方は中々いないと思うので、少し紹介です。
 これからのQtアプリ(どれくらいの規模に耐えられるのは分かりませんが)のスタンダードな作り方になるんじゃないかなーと思います。
 あくまでも構成的な話しなので、具体的な実装方法とかは今回はないです。

/// 構成 ///
 ざっくりと構成を図にすると下のようになります。
 path4250.png

 それぞれをざっくり説明するとこんな感じです。
①UI
 UIです。QMLを使用します。
 Qt Quick Controlsも2.0になって、ますますパワーアップして使い勝手が良くなってます。今回は使用していませんが、マテリアルデザインにさくっと変更することもできます。
 Qt Quickデザイナーが復活してhoge.qmlとhoge.ui.qmlという2つのファイルを組み合わせてデザインとロジックを分離する方式の作成方法も使用しました。
 レイアウトについてはRowLayoutなどが追加されてから、いろいろ強化されているのですが、デザイナーが使えるようになってわかりやすくなったと思います。

②読み書きクラスとのI/Fエレメント
 ユーザー操作や設定などを読み書きクラスへ届けます。逆に結果をユーザーに届けたりします。本の情報とかを保存したり、読み出したりと簡単なことをC++で書きます。
 他には、本に変換するコンテンツの一覧を管理するモデルクラスも作成します。それ程小難しいことはしませんが、ファイルの種類をQML側に伝えたりUI表示に必要な情報を提供します。

③読み書きクラス
 Wordファイルを解析したり、epubファイルを生成したりします。ここはC++のみでゴリゴリいきます。

④Qt Quick標準エレメント
 標準のエレメントです。見た目の部分をQMLで書かれていたりもします。

⑤Qt標準クラス
 言わずと知れたQtが提供する豊富なライブラリ群


/// Qt Quickデザイナーを使用するときの小ネタ ///
 見た目のないエレメントを配置すると左のツリーで思った通りの操作ができなくなります。
 文字通りツリーに表示されないのにいる扱いされて良く分からなくなります。
 なので、*.ui.qmlに見た目のないエレメントを手書きしないのが無難です。*.qmlをデザイナーで編集するときは注意しましょう。

/// まとめ? ///
 UIはQMLで作ります。
 アプリケーションのメイン機能はC++で作ります。
 見た目のない(今回の②)は、とても簡単です。まずは、この辺りから試して見ましょう。
 標準で用意されていない見た目を作りたいときはC++でエレメントを作ることになります(今回はない)。
 C++の部分は、今までどおりのQtプログラミングです。

 今回のソースコード8割弱はC++でした(Githubのリポジトリで表示される数字)。
 QMLかーと思っていても大丈夫です。全体から見ればそうでもないで安心してください(本当か?アプリ次第ですね)。
 ちょっと不安だなーと思われましたら、「Qt Quickを使いこなすクロスプラットフォームUIプログラミング+」という本があります。良ければ、どうぞ。

/// おまけ ///
 配布に使用しているインストーラに「Qt Installer Framework」を使用しています。
 こちらは、ちょこちょこっと設定ファイルを書くと簡単にインストーラを作成できます。
 ちなみに、解説書の「インストーラを作ろう!」と「インストーラを作ろう!!」があります。良ければ、どうぞ。
 作成方法と自動化で前後編になっています。