ixMは良い提案です。最初のステップは間違いなくメインウィンドウのレイアウトを使用することです - ツリーを残りのウィンドウから分離する - フォームを配置する場所。スプリッタを使用することをお勧めします。これは、ユーザーが2つの半分のサイズを変更できるためです。スプリッタは、メインウィジェットのCentralWidgetのメインウィジェットとして設定できます。
QSplitter splitter = new QSplitter(CentralWidget);
splitter->setOrientation(Qt::Horizontal);
splitter->setHandleWidth(3);
splitter->setChildrenCollapsible(false);
MyTree= new QTreeWidget(splitter);
splitter->addWidget(MyTree);
次に、ツリーウィジェットをスプリッタに追加します。これは左側に表示されます。
次のステップは、スプリッタの右側にプレースホルダウィジェットを追加することです。また、そのウィジェット内にレイアウトを追加する予定です。このレイアウトは後で使用することが非常に重要です。
QWidget WidgetRightSide = new QWidget(splitter);
QVBoxLayout setupLayout= new QVBoxLayout(WidgetRightSide);
setupLayout->setSpacing(0);
setupLayout->setContentsMargins(0, 0, 0, 0);
これまでのところ、これは私の答えが以前の回答と本当に異なるところです。あなたはQStackedWidgetを使うことができます。それは確かにオプションです。問題は、フォームを最初に作成して読み込む必要があることです。それはより多くのメモリを使用し、起動に時間がかかります。あなたが2-5のフォームを持っているなら、それはそれほど悪くはありませんが、20、30、またはそれ以上のフォームについては、実際にはおかしいです。
代わりに、ユーザーがツリー内で何かを選択すると、古いフォームが削除され、その時点で新しく選択されたフォームが追加されます。
ツリー内の選択されたアイテムがこれを変更すると、これで私たちは何をしなければなりません。
まず、以前選択したフォームからすべてのものを削除します。
QLayoutItem *_Item;
while ((_Item = setupLayout->takeAt(0)))
delete _Item;
次に表示するフォームを見つけて作成します。
QWidget *ActiveSetupForm = NULL;
if (I need to load form 1)
{
ActiveSetupForm = new YourNewForm(WidgetRightSide);
}
else ...
最後に、新しいフォームをレイアウトに追加します。
if(ActiveSetupForm)
{
setupLayout->addWidget(pActiveSetupForm);
}
ちょっとしたメモです。レイアウトは手間がかかります。フォームの作成時にQtDesignerを使用することを強くお勧めします。それは人生をはるかに容易にする。詳細について知りたい場合は、linkをご覧ください。
出典
2011-10-18 17:16:32
Liz