以编程方式隐藏垂直布局?

时间:2013-07-26 19:53:36

标签: c++ qt

我想知道是否可以隐藏垂直布局。我目前有一个水平布局,有两个垂直布局。我想在按钮点击时隐藏其中一个垂直布局(包含其所有内容)。关于我如何做到这一点的任何建议。

3 个答案:

答案 0 :(得分:3)

正如@jmk所说,你需要使用QWidget。我只是补充说,通过右键单击它并选择Morph Into-> QWidget:

,可以很容易地将现有的水平或垂直布局转换为Qt Designer中的小部件。

enter image description here

布局完全保留,但现在您可以显示/隐藏布局框,因为它是具有该布局的普通小部件。

答案 1 :(得分:2)

使用容器小部件轻松控制可见性,而不是将垂直布局直接插入顶级水平布局:

// Create your left and right widgets
QWidget* leftWidget = new QWidget();
QVBoxLayout* leftLayout = new QVBoxLayout(leftWidget);
QWidget* rightWidget = new QWidget();
QVBoxLayout* rightLayout = new QVBoxLayout(rightWidget);

// Populate your vertical layouts here ...

QHBoxLayout* horizontalLayout = new QHBoxLayout(parentWidget);
horizontalLayout->addWidget(leftWidget);
horizontalLayout->addWidget(rightWidget);

然后,您只需隐藏或显示leftWidgetrightWidget即可有效控制所有垂直布局中所有内容的可见性,而无需隐藏/显示每个小部件。

答案 2 :(得分:1)

我的建议:

// l is the layout pointer
for (int i = 0; i != l->count(); ++i) {
  QWidget* w = qobject_cast<QWidget*>(l->itemAt(i));
  if (w != 0) {
    w->setVisible(false); // hides the widget
  }
  else {
    // do some recursive things with the layout
  }
}

(希望它有效;))

小部件基本上是不可见的。