c++ - 如何解决 Qt 中的这个设计障碍?

标签 c++ forms qt qtgui qlayout

我需要绘制一个在左侧有一些选项的表单,如下图所示:

enter image description here

现在,当用户点击 OptionA 时,右侧会显示一个单独的相关布局。 当用户点击 OptionB 时,右侧会显示一个单独的相关布局。

我目前针对此类问题的设计方法如下:

有一个带有两个框架的水平布局的表单。一个框架有选项,而另一个框架将承载其他形式。所以,在我的例子中,optionA 会有一个单独的形式,比如 formA,OptionB 会有自己的形式,比如 formB,而 OptionC 会有它自己的形式,比如 formC。

现在,当用户点击OptionA 时,formA 将显示在 FrameHost 内,类似地,当用户点击 OptionC 时,formC 将显示在 FrameHost 内。我的问题是,这是否是为每个选项提供独立形式的好方法?

我的另一个想法是相反的,它是将所有表单(A、B 和 C)布局在一个表单内的单独框架内,当用户单击 OptionA 时,该框架包含 FormA 内容将变得可见,而其他人将被隐藏。因此,一次显示一帧。解决此类问题的最佳方法是什么?

最佳答案

第一种方法可以,但缺少 QStackWidget 的概念.我个人会使用 QStackedWidget 来根据单击的独占单选按钮显示表单。

第二种方法非常骇人听闻,因为它试图模仿这样一个事实,即这些表单将显示在同一个地方,然而,它会使它们在垂直方向上欺骗可见/隐藏属性。

我会这样写代码:

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)));

关于c++ - 如何解决 Qt 中的这个设计障碍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23851937/

相关文章:

c++ - 关于虚函数的问题

c++ - epoll_wait 即使带有 EPOLLET 标志也返回 EPOLLOUT

javascript - 当通过键盘选择 `<option>`时如何捕获?

javascript - FIrefox 不会阻止发送的提交事件

php - 如何编写mysql查询来检查表单提交可以匹配1 0f 5字段的多个变量选择

c++ - 如何使用这个调试宏?

python - PythonQt 被弃用了吗?

c++ - QTimer 替代品?

c++ - 如何检测对象来自哪个类? Qt

c++ - 在另一个小部件(父级)中绘制一个小部件的问题