繁体   English   中英

Qt从其他布局中删除布局

[英]Qt remove Layout from other Layout

当我使用delete layout_newInfo; layout_main-> update()发生了这种情况。 如何在运行时从layout_main中删除layout_newInfo(按按钮)?

按下按钮后,我需要把它取回来(下图)

通过单击按钮添加组件删除橙色部分(layout_newInfo)

我试过的代码:

    QLayout *layout = this->layout();

    QLayoutItem *item;
    while ((item = layout->takeAt(0)) != 0)
        layout->removeItem (item);
    delete layout_newInfo;
    layout_main->update();

您到底想实现什么? 如果要显示/隐藏现在位于layout_newInfo中的窗口小部件,请不要使用布局。 使用放置在layout_main(垂直布局)中的窗口小部件,它本身具有newInfo项目和布局,然后根据需要在该窗口小部件上使用setVisible(true / false)。

给定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行就足够了。

这里的示例显示删除QLayoutItem的父项QLayout将其从上部布局结构中删除(其析构函数也将其删除)。

最后找到答案的最佳方法是制作void方法,例如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(“”),因此下次显示片段时,将很清楚;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM