如何在运行时从layout_main中删除layout_newInfo(按下按钮)?
我试过的代码:
QLayout *layout = this->layout();
QLayoutItem *item;
while ((item = layout->takeAt(0)) != 0)
layout->removeItem (item);
delete layout_newInfo;
layout_main->update();
答案 0 :(得分:2)
您想要达到什么目标? 如果要显示/隐藏现在在layout_newInfo中的小部件,那么 不要使用布局。使用放在layout_main(垂直布局)中的小部件,它本身具有newInfo项和布局,然后根据需要在小部件上使用setVisible(true / false)。
答案 1 :(得分:0)
如果layout_newInfo嵌套到layout_main,我如何在运行时从layout_main中删除layout_newInfo?
语义更清晰的方法:
layout_main->removeItem(layout_newInfo); // make sure layout_newInfo object deleted
// after either by parent or somehow else
顺便说一下,通常这也应该同样删除嵌套布局:
delete layout_newInfo; // also removes it from upper layout
layout_main->update(); // triggers update on the screen
因此,只有在没有触发其他更新的情况下,有时仅需要layout_main->update()
调用的代码示例的2个底线就足够了。
来自here的示例显示,删除QLayoutItem
的父QLayout
确实会将其从上层布局结构中移除(其析构函数会将其删除)。
答案 2 :(得分:0)
最后找到答案的最佳方法是制作像void showNewInfo(QString action);
在课堂cpp文件中
void MainWind::showNewInfo(QString action)
{
if(action == "true")
{
bt_search->setEnabled(false);
bt_production->setEnabled(false);
bt_drying->setEnabled(false);
bt_storage->setEnabled(false);
ln_spent->show();
cb_thickness1->show();
cb_thickness2->show();
cb_thickness3->show();
cb_EFL1->show();
cb_EFL2->show();
bt_newItem->show();
}
else if(action == "false")
{
bt_search->setEnabled(true);
bt_production->setEnabled(true);
bt_drying->setEnabled(true);
bt_storage->setEnabled(true);
ln_spent->hide();
cb_thickness1->hide();
cb_thickness2->hide();
cb_thickness3->hide();
cb_EFL1->hide();
cb_EFL2->hide();
bt_newItem->hide();
}
}
还可以使用setText(""),所以下次显示片段时,它会很清楚;