ペイントソフト開発日誌

日々の出来事を殴り書き

Qt-ADSでVisualStudioみたいなアプリを作ろう

はじめに

今回は私がペイントソフト開発で使用しているライブラリの一つであるQt Advanced Docking System(以下Qt-ADS)について紹介します。
こちらのライブラリはQtでドックウィジェットを実装するためのQDockWidgetの機能をより強化したライブラリです。
「ドックウィジェット」というのはVisual Studioで言うところの「出力」や「プロパティ」といった、ユーザーが任意で配置をカスタマイズできるウィンドウを指します。
Qtには標準でそれに近いことができるQDockWidgetというクラスがあるのですが、機能的に未熟な点が多いため、このライブラリを使用することでそれを改善することができます。

Visual Studioの画面

QDockWidgetの不満点

Qt-ADSの機能を紹介する前にQt標準のQDockWidgetがどういったものか見せておきます。
ここでは例としてQt公式のQDockWidgetを利用したサンプルプロジェクトを使用します。
興味がない方は読み飛ばしてもらって構いません。

Dock Widgets Example

実装について気になる方はこちらのページに解説があるため御覧ください。
アプリとしてはメールのテンプレートを構築する機能が備わっており、「Customers」や「Paragraphs」がドックウィジェットに該当します。
結論から書くとQDockWidgetにはフローティング中ドックウィジェットに関して以下の問題があります。

Windowsのスナップ機能が効かない

Windowsのスナップ機能が効かない
メインウィンドウから独立したドックウィジェットは上記のようになるのですが、このウィンドウには最小化や最大化といったボタンは存在しておらず、Windowsのスナップ機能(画面端に持っていったときに隙間なくレイアウトされるやつ)が動作しません。
デュアルディスプレイ環境では画面いっぱいに使いたいこともあるので、そういったユーザーからするとストレスになります。

ドックウィジェット同士をドッキングできない

もう一つの不満点としてメインウィンドウから独立したドックウィジェット同士をドッキングできないというものもあります。
この仕様の問題点としては、ウィンドウの移動やリサイズを一つ一つ行う必要があり、手間がかかるといったものが挙げられます。

Qt-ADSの機能

それでは本題です。Qt-ADSでは上記2つの問題のほか様々なエンハンスが行われています。
本当はQDockWidgetのサンプルコードを修正するのが望ましいのですが、面倒なのでこちらも公式のサンプルコードを使用します。

AdvancedDockingSystemDemo

この画面だけでもタブにアイコンが表示されていたり、アクティブなウィンドウがハイライトされていることがわかります。
そして注目すべきはドックウィジェットのレイアウトを変更するときのこのUI...

VisualStudioじゃん!
何を隠そうこのライブラリを使えばVisualStudioのUIに近い機能を簡単に実装できてしまうのです。

ライブラリとしての質も高く、様々なプロジェクトに導入実績があります。
ライセンスはQtと同じLGPLなのでOSSでなくとも採用ができます。
気になる導入手順ですが、CMakeでビルドできるので詳細は省かせてください。

github.com