Ale*_*yuv 30 c++ qt qt4 qt-designer
我试图隐藏布局中的所有小部件.但看起来findChildren不适合布局.
这是我的示例代码:
QLayout * layout = widget -> findChild<QLayout *> (layoutName);
QList<QWidget *> list = layout -> findChildren<QWidget *> ();
cout << list.size() << endl;
Run Code Online (Sandbox Code Playgroud)
size是0,但在这个布局中我有一些小部件.但是,如果我尝试从父窗口小部件获取窗口小部件,相同的代码工作正常.
我如何从适当的布局中获取它们?
Fra*_*eld 35
布局不会在父子树中"注入"自身,因此窗口小部件保留(直接)其父窗口小部件的子项.
你可以使用QLayout::count()而QLayout::itemAt()不是.
bra*_*aks 29
您可以简单地遍历布局的项目itemAt(),然后使用,然后测试该项目是否为小部件:
for (int i = 0; i < gridLayout->count(); ++i)
{
QWidget *widget = gridLayout->itemAt(i)->widget();
if (widget != NULL)
{
widget->setVisible(false);
}
else
{
// You may want to recurse, or perform different actions on layouts.
// See gridLayout->itemAt(i)->layout()
}
}
Run Code Online (Sandbox Code Playgroud)
已经很晚了,但是如果有人找到像我这样的人,这就是我的解决方案:我尝试了@braggPeaks答案(与@Frank Osterfeld答案相同),但是失败了。然后,我像这样进行修改,并且它就像一种魅力。(我不知道为什么会这样,因为我的布局没有空项目,但仍然需要检查是否有空项目。)
for (int i = 0; i < this->layout->count(); ++i) {
QWidget *w = this->layout->itemAt(i)->widget();
if(w != NULL)
w->setVisible(false);
}
Run Code Online (Sandbox Code Playgroud)