Как преодолеть это препятствие в дизайне Qt?

Мне нужно нарисовать форму, которая будет иметь некоторые параметры слева, это можно увидеть на следующей диаграмме:

введите описание изображения здесь

Теперь, когда пользователь нажимает на OptionA, отдельный связанный макет будет показан справа.
и когда пользователь нажимает на OptionB, отдельный связанный макет будет показан справа.

Мой текущий подход к проектированию для такого типа проблемы заключается в следующем:

Есть форма с горизонтальной разметкой с двумя рамками. Один кадр имеет параметры, в то время как другой кадр будет содержать другие формы. Итак, в моем случае optionA будет иметь отдельную форму, скажем, форму А, OptionB будет иметь свою собственную форму, скажем, форму B, и OptionC будет иметь свою собственную форму, скажем, formC.

Теперь, когда пользователь нажимает на OptionA formA будет отображаться внутри FrameHost, аналогично, когда пользователь нажимает на OptionC, formC будет отображаться внутри FrameHost. Мой вопрос, является ли это хорошим подходом, дающим каждому варианту независимую форму?

Моя другая мысль — противоположность, которая заключается в том, чтобы все макеты форм (A, B и C) находились внутри отдельной рамки внутри одной формы, и когда пользователь нажимает на OptionA фрейм с содержимым FormA будет виден, а другие будут скрыты. Таким образом, один кадр будет показан за один раз. Каков наилучший подход к решению такой проблемы?

1

Решение

Первый подход в порядке, но не хватает концепции 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)));
1

Другие решения


По вопросам рекламы [email protected]