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

现在,当用户单击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)));

09-06 22:11