0

私は、動的コンテンツで満たされたフレームを持つ 1 つの静的ウィンドウを必要とするデスクトップ ソフトウェアに取り組んでいます。フレームはメイン ウィンドウにあり、メイン ウィンドウにはグリッド レイアウトがあり、エディターを介して追加したウィジェットをウィンドウのサイズ変更に合わせて自動的にサイズ変更/拡張できます。

カスタム ウィジェットを作成し (フレームとドッキング可能なウィジェットでいくつかのバリエーションを作成しました)、目的の動作を試してみました。このウィジェットを新しいレイアウトに追加し (QVBoxLayout と QGridLayout の両方を試しました)、フレームにそのレイアウトを使用するように指示すると、ウィジェットは表示されませんが、ウィジェットのフレーム バリアントを作成し、それをフレームで親にすると、ウィジェットは表示されません。コンストラクター (別名 new CustomWidget( this->ui->my_frame ); ) では、表示されますが、明らかにレイアウトに従っていません (展開しません)。カスタム ウィジェット (QWidget、QFrame、または QDockableWidget など) の他の組み合わせはフレームに表示されません。

メインウィンドウのサイズ変更イベント関数をオーバーライドするとこれが解決される可能性があることをいくつかの場所で読みましたが、それはレイアウトを使用していない場合のみです-レイアウトを使用することをお勧めします。

固定コンテンツと QTabWidget を使用すれば目的の出力を得ることができますが、このアプリケーションを構築しているクライアントは、タブを使用しないことを強く望んでいます。競合他社のソフトウェアはタブを使用しており、見た目がかっこ悪いという点で意見が一致しています。

最終的にはウィジェット インターフェイスのコードを作成することになると思いますが、これらのウィジェットをレイアウトにインポートしても期待どおりに動作しない理由が気になります。

4

2 に答える 2

0

私があなたの説明を正しく理解していれば、実行時に他の QWidget を動的に追加するために使用したい空白の QFrame を含むメイン ウィンドウがあります。

新しい子 QWidget をプレースホルダー QFrame に追加する場合、それらを自動的に配置してサイズ変更したい場合は、メイン ウィンドウではなく、プレースホルダー QFrame の QLayout に追加する必要があります。

于 2013-08-02T16:10:44.240 に答える
0

単純なウィジェットのサブクラス (たとえば、テキストを含む QLabel) から始めて、それをコードで使用して、それが機能するかどうかを確認することをお勧めします。Qt がウィジェットに期待することを処理するコードを追加する必要があり、それは既存のウィジェットによって既に処理されている可能性があります。

過去の経験から、あなたが説明したこと(レイアウトに追加し、そのレイアウトをフレームに割り当てる)は機能し、正しい方法です。したがって、カスタム ウィジェットから欠落しているレイアウト シグナルを処理するコードが必要になると思います。

例えば:

レイアウトは、子ウィジェットをコンテナー内に自動的に配置するエレガントで柔軟な方法です。各ウィジェットは sizeHint プロパティと sizePolicy プロパティを介してそのサイズ要件をレイアウトに報告し、レイアウトはそれに応じて利用可能なスペースを分配します。

From:ウィジェットとレイアウトのドキュメント

于 2013-08-03T15:09:41.490 に答える