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

时间:2014-05-25 04:11:33

标签: 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内容的框架可见,而其他人则被隐藏。因此,一次显示一帧。解决这类问题的最佳方法是什么?

1 个答案:

答案 0 :(得分:1)

第一种方法没问题,但缺乏QStackWidget的概念。我个人会使用QStackedWidget来显示表单,具体取决于点击的独家单选按钮。

第二种方法是非常hackish,因为它试图模仿这些形式将显示在同一个地方的事实,但是,它会使它们在可见/隐藏属性上垂直欺骗。

我会写这样的代码:

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