ixM有一个很好的建议。第一步当然应该是在主窗口中使用布局 - 将树与窗口的其余部分分开 - 您要放置表单的位置。我会建议使用分离器,因为那时用户可以调整两半。您可以在主窗口中将分离器设置为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