【问题标题】:Qt: making a layout's children invisible/visibleQt:使布局的子项不可见/可见
【发布时间】:2018-03-16 18:52:23
【问题描述】:
我有一个QHBoxLayout,我想让它的孩子不可见,然后再可见。我尝试了QWidget::findChildren()、QObject::children() 和QLayout::widget() 的各种组合,但这些都不起作用。前 2 个返回空列表,第 2 个返回 NULL。
【问题讨论】:
标签:
qt
user-interface
qt4
show-hide
【解决方案1】:
小部件不是布局的子级:QWidget 只能是 QWidget 的子级,QLayout 不是小部件。您必须改为递归枚举布局的元素。回想一下QLayout 是一个QLayoutItem:
void setLayoutVisible(QLayoutItem *item, bool visible) {
if (auto widget = item->widget())
return widget->setVisible(visible);
if (auto layout = item->layout())
for (int i = 0; i < layout->count(); ++i)
setLayoutVisible(layout->itemAt(i), visible);
};