私は単純な GUI に取り組んできましたが、障害にぶつかりました。GUI レイアウト マネージャーの作成方法に関する例や読み取り可能なソースさえ見つかりませんでした。作成に関するリソースや、Qt のレイアウト エンジンのように暗号化されていないソース コードを誰かが知っているかどうか疑問に思っていました。
2 に答える
「レイアウトマネージャー」の意味にもよりますが、私はQtに慣れていないので、あまり手がかりがありません。
ただし、サイズ変更可能なウィンドウの処理などを意味する場合、関連する用語は「制約ソルバー」だと思います。あまり詳しく調べたことはありませんが、GUI 制約ソルバーは線形計画法(シンプレックス アルゴリズムなど) に基づいていると思います。Gaussian Eliminationで何かできるかもしれませんが、私はそれについて自信がありません。
「gui レイアウト 線形プログラミング」のクイック検索に基づいて、 CiteSeerX からのこの論文が興味深いものであることがわかるかもしれません - PDF のダウンロードがあります。不可解なものが嫌いな人のために、少なくとも一見したところ、数学が重いわけではありませんが、軽く読むこともできないと思います。興味があるのですぐにわかると思います。
私は現在、Mozilla XUL 用の Windows ポートを作成しています。私のアプローチには、Steve が言及したような線形プログラミング手法は含まれていませんが、よりオブジェクト指向のアプローチです。Composite および Decorator の設計パターンに基づいています。
複合パターンを使用すると、子コントロールを持つコントロールを作成できます。子コントロールは、独自の子を持つことができます。コントロールは、指定されたクライアントの四角形内に子コントロールを配置する責任があります。
たとえば、子コントロールを水平に配置するレイアウトを実装するとします。次に、レイアウト アルゴリズムは、各子コントロールの x オフセットを計算するために、各子コントロールの幅を計算する必要があります。
コンテナの幅の計算は、子コントロールの幅の合計を返すことによって行われます。
Decorator クラスを使用して、追加のプロパティを追加できます。たとえば、MarginDecorator は子コントロール間にスペースを追加でき、ScrollDecorator はスクロールバーなどを追加できます...
楽しいことですね、頑張ってください!