はじめに
今回は私がペイントソフト開発で使用しているライブラリの一つであるQt Advanced Docking System(以下Qt-ADS)について紹介します。
こちらのライブラリはQtでドックウィジェットを実装するためのQDockWidget
の機能をより強化したライブラリです。
「ドックウィジェット」というのはVisual Studioで言うところの「出力」や「プロパティ」といった、ユーザーが任意で配置をカスタマイズできるウィンドウを指します。
Qtには標準でそれに近いことができるQDockWidget
というクラスがあるのですが、機能的に未熟な点が多いため、このライブラリを使用することでそれを改善することができます。
QDockWidgetの不満点
Qt-ADSの機能を紹介する前にQt標準のQDockWidget
がどういったものか見せておきます。
ここでは例としてQt公式のQDockWidget
を利用したサンプルプロジェクトを使用します。
興味がない方は読み飛ばしてもらって構いません。
実装について気になる方はこちらのページに解説があるため御覧ください。
アプリとしてはメールのテンプレートを構築する機能が備わっており、「Customers」や「Paragraphs」がドックウィジェットに該当します。
結論から書くとQDockWidget
にはフローティング中ドックウィジェットに関して以下の問題があります。
Windowsのスナップ機能が効かない
メインウィンドウから独立したドックウィジェットは上記のようになるのですが、このウィンドウには最小化や最大化といったボタンは存在しておらず、Windowsのスナップ機能(画面端に持っていったときに隙間なくレイアウトされるやつ)が動作しません。
デュアルディスプレイ環境では画面いっぱいに使いたいこともあるので、そういったユーザーからするとストレスになります。
ドックウィジェット同士をドッキングできない
もう一つの不満点としてメインウィンドウから独立したドックウィジェット同士をドッキングできないというものもあります。
この仕様の問題点としては、ウィンドウの移動やリサイズを一つ一つ行う必要があり、手間がかかるといったものが挙げられます。
Qt-ADSの機能
それでは本題です。Qt-ADSでは上記2つの問題のほか様々なエンハンスが行われています。
本当はQDockWidget
のサンプルコードを修正するのが望ましいのですが、面倒なのでこちらも公式のサンプルコードを使用します。
この画面だけでもタブにアイコンが表示されていたり、アクティブなウィンドウがハイライトされていることがわかります。
そして注目すべきはドックウィジェットのレイアウトを変更するときのこのUI...
VisualStudioじゃん!
何を隠そうこのライブラリを使えばVisualStudioのUIに近い機能を簡単に実装できてしまうのです。
ライブラリとしての質も高く、様々なプロジェクトに導入実績があります。
ライセンスはQtと同じLGPLなのでOSSでなくとも採用ができます。
気になる導入手順ですが、CMakeでビルドできるので詳細は省かせてください。