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 при создании форм. Это делает жизнь намного проще. Если вы хотите узнать больше об этом, перейдите по этой ссылке .