Мне нужно нарисовать форму, которая будет иметь некоторые параметры слева, это можно увидеть на следующей диаграмме:
Теперь, когда пользователь нажимает на OptionA
, отдельный связанный макет будет показан справа.
и когда пользователь нажимает на OptionB
, отдельный связанный макет будет показан справа.
Мой текущий подход к проектированию для такого типа проблемы заключается в следующем:
Есть форма с горизонтальной разметкой с двумя рамками. Один кадр имеет параметры, в то время как другой кадр будет содержать другие формы. Итак, в моем случае optionA
будет иметь отдельную форму, скажем, форму А, OptionB
будет иметь свою собственную форму, скажем, форму B, и OptionC
будет иметь свою собственную форму, скажем, formC.
Теперь, когда пользователь нажимает на OptionA
formA будет отображаться внутри FrameHost, аналогично, когда пользователь нажимает на OptionC
, formC будет отображаться внутри FrameHost. Мой вопрос, является ли это хорошим подходом, дающим каждому варианту независимую форму?
Моя другая мысль — противоположность, которая заключается в том, чтобы все макеты форм (A, B и C) находились внутри отдельной рамки внутри одной формы, и когда пользователь нажимает на OptionA
фрейм с содержимым FormA будет виден, а другие будут скрыты. Таким образом, один кадр будет показан за один раз. Каков наилучший подход к решению такой проблемы?
Первый подход в порядке, но не хватает концепции QStackWidget. Я бы лично использовал QStackedWidget для показа форм в зависимости от выбранной радио-кнопки.
Второй подход очень хакерский, потому что он пытается имитировать тот факт, что эти формы будут отображаться в одном и том же месте, но при этом он будет отображать их по вертикали с помощью свойства visible / hidden.
Я бы написал код так:
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)));