【问题标题】:How to tackle this design obstacle in Qt?如何在 Qt 中解决这个设计障碍?
【发布时间】:2014-05-25 04:11:32
【问题描述】:

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

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

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

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

现在,当用户单击OptionA 时,formA 将显示在 FrameHost 中,同样,当用户单击 OptionC 时,formC 将显示在 FrameHost 中。我的问题是,这是否是一种为每个选项提供独立形式的好方法?

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

【问题讨论】:

    标签: c++ forms qt qtgui qlayout


    【解决方案1】:

    第一种方法还可以,但是缺少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)));
    

    【讨论】:

      猜你喜欢
      • 2018-02-24
      • 2016-05-11
      • 2010-12-18
      • 2018-01-16
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 2016-10-14
      • 1970-01-01
      相关资源
      最近更新 更多