1

グリッドのようなダイアログを作成するとき、同じ構造を持つ複数の列が必要になることがよくあります。列の数は実行時にしかわかりません (同じ種類のオブジェクトの複数のインスタンスの構成パラメーターを考えてください)。

望ましい結果

この状況では、通常の Qt ウィジェット デザイナーでは不十分です。さまざまなヘッダーと「プロトタイプ列」を快適に設計できますが、実行時にそのような列の作成を複製する簡単な方法がないためです (すべてのウィジェットが一緒に作成されます)。であり、ssetupUiを複製する簡単な方法はありませんQWidget)。

別の方法として、「プロトタイプ列」を別のカスタム ウィジェット ( を使用して子ウィジェットを整列させるQVBoxLayout) に分割し、そのようなカスタム ウィジェットを実行時に親ダイアログでインスタンス化し、それらのインスタンスをQHBoxLayout.

このアプローチの問題は、それぞれQVBoxLayoutが他の列を考慮せずに独自に計算を実行するため、異なる列のウィジェットが水平方向に整列されない可能性があるため、目的のグリッド レイアウトが簡単に台無しになることです。

ここに画像の説明を入力

頭に浮かぶ唯一の他の可能性は、説明されているようにプロトタイプ列を別のウィジェットに分割することですが、カスタムウィジェットを に配置する代わりに、QHBoxLayoutその子を「盗み」、それらを親に正しく配置しQGridLayoutます。これにより、目的のグラフィック効果が得られますが、子の親を変更してカスタム ウィジェットを非表示にするのは、少しハックのように感じます。

さて、私の質問は2つあります:

  • 「偽の」コンテナがそれらに特別なことをしないことを考えると、そのような子ウィジェットを喜んで再親化する際に私が気付いていない可能性のある潜在的な問題はありますか?
  • この問題に対するより良いアプローチはありますか? 理想的には、子ウィジェットを「メイン」グリッドとマージする方法を考えたいと思いますがQGridLayout、そのようなことはないようです。
4

0 に答える 0