Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 以编程方式隐藏垂直布局?_C++_Qt - Fatal编程技术网

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

C++ 以编程方式隐藏垂直布局?,c++,qt,C++,Qt,我想知道是否有可能隐藏垂直布局。我现在有一个水平布局和两个垂直布局。我想在点击按钮时隐藏其中一个垂直布局(及其所有内容)。关于如何做到这一点的任何建议。我的建议: // 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

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

我的建议:

// 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
  }
}
//l是布局指针
对于(int i=0;i!=l->count();++i){
QWidget*w=qobject_cast(l->itemAt(i));
如果(w!=0){
w->setVisible(false);//隐藏小部件
}
否则{
//对布局执行一些递归操作
}
}
(希望能奏效)


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

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

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

然后,您可以简单地隐藏或显示
leftWidget
righwidget
,以有效地控制垂直布局中所有内容的可见性,而不必隐藏/显示每个单独的小部件。

正如@jmk所说,您需要使用QWidget。我要补充的是,通过右键单击现有的水平或垂直布局并选择Morph to->QWidget,可以很容易地将其从Qt Designer转换为小部件:


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

类似的方法可能会奏效,除非您将显式设置每个小部件的可见性。如果这些小部件中的一些已经被隐藏,那么当你再次使它们可见时,你必须小心。在这种情况下,使用父窗口小部件控制可见性要简单得多。