はじめに
Qt Creatorを使い始めた際、プロジェクトを開くために毎回ディレクトリを深く辿ったり、ファイルを選択したりする操作に煩わしさを感じることがありました。 そこで、「プロジェクトを開く手間を減らしたい」という実利的な動機と、「Qtの学習」という目的を兼ねて、プロジェクトを素早く開くためのシンプルなランチャーアプリ「QtProjectLink (Qt Project Launcher)」を作成しました。
QtProjectLinkとは?
Qt Creatorで管理しているQtプロジェクト(CMakeLists.txtや.proファイルがあるディレクトリ)を、即座に開くためのツールです。 「シングルプロジェクトモード」と「マルチプロジェクトモード」の2つの使い方が用意されており、用途に合わせて切り替えられます。
主な機能
- シングルプロジェクトモード: 実行ファイルをプロジェクトフォルダ内に置くだけで、そのプロジェクトを直接起動します。
- マルチプロジェクトモード: 設定ファイルに記述した複数のプロジェクトパスから、リスト選択で起動します。
- 自動起動機能: プロジェクトが1つだけ登録されている場合など、条件を満たせばGUIを表示せずに直接Qt Creatorを起動します。
- Qt Creatorの自動検出: システムのPATH環境変数からqtcreatorを自動検索し、見つからない場合はデフォルトのパスを使用します。
開発で苦労した点:C++(ロジック)と QML(UI)の連携
今回の開発では、Qtのモダンなスタイルである 「バックエンドはC++、フロントエンドはQML」 という構成に挑戦しました。この2つの橋渡しをする部分が、学習において最も苦労したポイントです。
1. 役割の分離とデータの同期
C++側(LinkCreatorクラス)でシステムパスの検索や設定ファイルの解析を行い、その結果をQML側(Main.qml)のリストビューで表示させる必要がありました。C++のデータをQMLで扱える形式に変換したり、Q_PROPERTYなどを用いてデータを同期させる作法の理解に時間を費やしました。
2. シグナルとスロットによる非同期制御
ユーザーがQML上のUIでプロジェクトを選択した際、その情報をC++側に伝え、実際にqtcreatorプロセスを起動するという一連の流れを、シグナルとスロットを使って制御する仕組みに苦心しました。
3. 条件による挙動の出し分け
「プロジェクトが1つのときはGUIを出さない」といった柔軟な挙動を実現するために、C++側のロジックとQMLの表示制御をいかにスムーズに連携させるか、という点も試行錯誤の連続でした。
使い方
1. シングルプロジェクトモード
ビルドした実行ファイル(appmakeQtProjectLink)を、プロジェクトのルートフォルダにコピーします。
実行ファイルを実行するだけで、Qt Creatorでそのプロジェクトが開きます。
ヒント: 実行ファイル名をプロジェクト名に変更したり、ショートカットを作成しておくとさらに便利です。
2. マルチプロジェクトモード
- 設定ファイル
qtProjectList.txtを作成し、プロジェクトのフルパスを1行ずつ記述します。 - 作成したファイルを、OSごとの所定のフォルダに配置します。
C:\Users\<ユーザー名>\AppData\Local\makeQtProjectLink\qtProjectList.txt
~/.local/share/makeQtProjectLink/qtProjectList.txt
~/Library/Application Support/makeQtProjectLink/qtProjectList.txt
3.実行ファイルを起動するとリストが表示されます。キーボードの数字キーでプロジェクトを即座に選択可能です。
ビルド方法
このプロジェクトは Qt 6 と CMake を使用しています。
mkdir build
cd build
cmake ..
cmake --build .
ビルドが完了すると、実行ファイルが生成されます。
おわりに
自分の「不便」を解消するために作り始めたツールですが、結果としてQt開発の核心であるC++とQMLの連携を深く学ぶ良い機会になりました。 同じようにQt Creatorでのプロジェクト管理を少しでも効率化したいと考えている方の参考になれば幸いです。