1. ホーム
  2. qt

[解決済み] Qtのフォームレイアウト機構を理解する

2022-02-19 13:11:10

質問

Qt は、デスクトップアプリケーションのウィンドウ表示を扱うための柔軟で強力なレイアウトメカニズムを持っています。

しかし、あまりに柔軟なため、何か問題が起きて微調整が必要になったときに、ほとんど理解されないのです。そして、あまりにも強力なので、フォームがどのように見えるべきかというQtの意見を圧倒しようとする人を打ち負かすことができます。

そこで、どなたかQtの位置決め機構について説明、または記事、ソースを提供していただけませんか?

私は QLabel , QPushButtonQTableView の2倍である。 QTextBrowser 持つ verticalStretch = 1 の下にあります。ウィジェットの高さを適切に処理するにはどうしたらよいでしょうか。

google docsにある私のフォームの.uiファイル。名前で'○○'を検索し、QtDesignerでプレビューしてください。

解決方法は?

レイアウトは実はわかりやすいと思います。)
レイアウトの簡単な説明は、QT book "に載っています。 QTによるC++ Guiプログラミング 第2版 "

レイアウトとそのサイズポリシーについて注意すべきこと

  • ほとんどのQtウィジェットには、サイズポリシーがあります。このサイズポリシーは、ウィジェットがどのように伸縮すべきかをシステムに伝えます。これは、QSizePolicy クラスから取得します。サイズポリシーは、垂直方向と水平方向の両方のコンポーネントを持っています。
  • ほとんどのウィジェットには、サイズヒントがあります。このサイズヒントは、ウィジェットの好みの大きさをシステムに伝えます。
  • QSizePolicy には、ウィジェットが異なる速度で成長することを可能にするストレッチファクターがあります。
**私は4つのサイズポリシーしか知りません**。
  • 固定サイズポリシー - ウィジェットのサイズは固定されており、引き伸ばすことはできません。そのサイズのヒントのままです。
  • 最小サイズポリシー - サイズヒントはウィジェットの可能な限り小さなサイズですが、必要に応じて大きくすることができます。
  • 優先サイズポリシー - ウィジェットは、そのサイズヒントよりも縮小または大きくなることができます。
  • 拡大サイズポリシー - ウィジェットはそのサイズヒントよりも縮小または拡大することができます :)
と聞きたくなるかもしれません。 preferredとexpendingの違いは何ですか? **回答:** 2つのウィジェットがあるフォームを想像してみてください。すると、余分なスペースは、エクスパンディングポリシーを持つウィジェットに与えられます。優先ポリシーのウィジェットは、そのサイズのヒントのままです。

私がお勧めするのは(警告:専門家ではありません :) を購入し、一読してください。 "です。 QTによるC++ Guiプログラミング 第2版 "です。現在読んでいるのですが、とても納得のいく内容です。画像を見て、何か意味があるのかどうか確かめてみてください。

サイズポリシーの説明

簡単な例
これは、2つのボタンを持つシンプルなダイアログで、その水平方向と垂直方向のサイズポリシーが、水平方向と垂直方向のストレッチとして表示されています。

プレビューの最小サイズはこちらです。

さらに大きなサイズのプレビューはこちら

[EDITED: //サイズヒントの例を追加しました。]

なぜsizehintを気にする必要があるのか
QT のレイアウトシステムは常に sizeHint を尊重するため、すべてのウィジェットに sizeHint があることがわかります。これは、ウィジェットのデフォルトサイズが正確にあなたの望むものでない場合にのみ問題となります。この問題を回避する唯一の方法は、ウィジェットを拡張(サブクラス)し、その sizeHint() メンバ関数です。百聞は一見に如かず。そこで、私のブログでプロジェクトの例を紹介します。