1

左側にいくつかのオプションがあるフォームを描画する必要があります。これを次の図に示します。

ここに画像の説明を入力

これで、ユーザーが をクリックするOptionAと、関連する別のレイアウトが右側に表示されます。ユーザーが をクリックするOptionBと、別の関連するレイアウトが右側に表示されます。

このようなタイプの問題に対する私の現在の設計アプローチは次のとおりです。

2 つのフレームを持つ水平レイアウトのフォームを作成します。1 つのフレームにはオプションがあり、もう 1 つのフレームには他のフォームがホストされます。したがって、私の場合optionA、別のフォーム (formA など)OptionBがあり、独自のフォーム (formB など) があり、独自のフォーム (formC など)OptionCがあります。

ユーザーがformA をクリックすると、FrameHost 内に表示されます。OptionA同様に、ユーザーが をクリックするとOptionC、formC が FrameHost 内に表示されます。私の質問は、これが各オプションに独立した形式を与える良いアプローチであるかどうかです?

私のもう1つの考えは反対で、すべてのフォーム(A、B、C)のレイアウトを1つのフォーム内の別のフレーム内に配置し、ユーザーOptionAがFormAコンテンツを持つフレームをクリックすると、他のコンテンツが非表示になります。したがって、一度に 1 つのフレームが表示されます。この種の問題に取り組むための最良のアプローチは何でしょうか?

4

1 に答える 1

1

最初のアプローチは問題ありませんが、 QStackWidgetの概念が欠けています。クリックされた排他的なラジオボタンに応じてフォームを表示するために、個人的に QStackedWidget を使用します。

2 番目のアプローチは、これらのフォームが同じ場所に表示されるという事実を模倣しようとしているため、非常にハックです。

次のようなコードを書きます。

MyWidget *formA = new MyWidget;
MyWidget *formB = new MyWidget;
MyWidget *formC = new MyWidget;

QStackedWidget *stackedWidget = new QStackedWidget;
stackedWidget->addWidget(formA);
stackedWidget->addWidget(formB);
stackedWidget->addWidget(formC);

QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(stackedWidget);
setLayout(layout);

connect(myButtonGroup, SIGNAL(clicked(int)), SLOT(setCurrentIndex(int)));
于 2014-05-25T04:21:40.183 に答える