1

2つの問題の解決策が見つかりませんでしたQLayoutsQHBoxLayout新しいウィジェット、プッシュボタンなどを追加するときに、expandindが可能なアプリが必要です。つまり、1QDialogつと2つのレイアウトがあります。これで、レイアウトを非表示にできないことがわかりました。だから私はちょうどトレイします:

layout()->removeItem(firstlayout);
layout()->addLayout(secondLayout);

しかし、これを行ったとき、位置[0,0]の最初のレイアウトにあるすべてのアイテムが表示されました。次のステップは次のとおりです。

for (all items in first layout) if (widget) widget->hide();

しかし、これはでのみ機能しQWidget、レイアウトにはさまざまなアイテムがあります。

非表示/表示を使用できるため、ウィジェットを使用するのが簡単ですが、新しいアイテムを追加するときにウィンドウを自動拡張する必要があります。

4

2 に答える 2

1

レイアウトを再構築するだけで、2 つのレイアウトを同時に存在させる必要はありません。おそらく最も明確なのは、最初に現在のレイアウトを削除し、次に新しいレイアウトを作成し、それにウィジェットを追加し、非表示にするすべてのウィジェットを非表示にして、それを現在のレイアウトとして設定する 2 つ (またはそれ以上) のメソッドを用意することです。QWidget にはとにかくそれがあり、セッターとゲッターを提供するため、レイアウトのメンバー変数を保持する必要さえないことに注意してください。

または、異なるレイアウトに異なるウィジェットがあり、実際に「ページを切り替える」ことができるようにしたい場合は、単純にQStackedWidgetを使用してください。または、固定部分 (ボタンなど) があり、「ページ」を含む部分がある場合は、「ページ」を QStackedWidget に入れ、固定部分を除外します。

于 2012-10-14T09:23:12.230 に答える
0

「addLayout(secondLayout/firstLayout)」は他のレイアウトを自動的に削除します。削除する必要はありません。レイアウト (前に addWidget() がある) へのポインターを保持している場合は、後でそのレイアウトとウィジェットを簡単に使用できます。:)

于 2012-10-14T11:16:24.830 に答える