Qt:制作布局的 children invisible/visible
Qt: making a layout's children invisible/visible
我有一个 QHBoxLayout
,我想让它的 children 不可见,然后再显示。我已经尝试了 QWidget::findChildren()
、QObject::children()
和 QLayout::widget()
的各种组合,但是 none 这些都有效。前 2 return 个空列表,第二个 return 是 NULL。
小部件不是布局的子项:QWidget
只能是 QWidget
的子项,并且 QLayout
不是小部件。您必须改为递归枚举布局的元素。回想一下 QLayout
is-a 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);
};
我有一个 QHBoxLayout
,我想让它的 children 不可见,然后再显示。我已经尝试了 QWidget::findChildren()
、QObject::children()
和 QLayout::widget()
的各种组合,但是 none 这些都有效。前 2 return 个空列表,第二个 return 是 NULL。
小部件不是布局的子项:QWidget
只能是 QWidget
的子项,并且 QLayout
不是小部件。您必须改为递归枚举布局的元素。回想一下 QLayout
is-a 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);
};