繁体   English   中英

Qt删除嵌套布局

[英]Qt remove nested layout

我在单个QVBoxLayout嵌套了几个QHBoxLayout对象。 我已经研究了许多stackoverflow的问题和答案,但是还没有找到一种完全删除QScrollArea小部件内容布局的QScrollArea 我所看到的所有答案仅使再次设置布局成为可能,但是当第二次设置布局时,对象仍然存在。

这是我正在使用的代码:

QSignalMapper* sMap = new QSignalMapper(this);
QVBoxLayout* vBox = new QVBoxLayout();

outerVector = 0;
for (vector<vector<QPushButton*>>::iterator o_iter = buttonGrid.begin(); o_iter < buttonGrid.end(); o_iter++) {
    int innerVector = 0;
    QHBoxLayout* hBox = new QHBoxLayout();
    for (vector<QPushButton*>::iterator i_iter = (*o_iter).begin(); i_iter < (*o_iter).end(); i_iter++) {
        hBox->addWidget(buttonGrid.at(outerVector).at(innerVector));
        sMap->setMapping(buttonGrid.at(outerVector).at(innerVector), ((outerVector * 100) + innerVector));
        connect(buttonGrid.at(outerVector).at(innerVector), SIGNAL(clicked()), sMap, SLOT(map()));
        innerVector++;
    }
    vBox->addLayout(hBox);
    outerVector++;
}

ui->GameAreaWidgetContents->setLayout(vBox);
connect(sMap, SIGNAL(mapped(int)), this, SLOT(on_buttonGrid_clicked(int)));

现在,我有这个用于清除布局:

delete hBox;
delete vBox;
ui->GameAreaWidgetContents->layout();

清除窗口小部件内容的最佳,最有效的方法是什么?

更新 :我推断GameAreaWidgetContentsQScrollArea 要清除其布局管理器,您可以执行以下操作:

delete ui->GameAreaWidgetContents->layout();

vbox将不再是窗口小部件的布局管理器,并且所有嵌套的子代将由Qt育儿系统自动删除。

QWidget::setLayout()文档中

如果此窗口小部件上已经安装了布局管理器,则QWidget将不允许您安装另一个。 必须先删除现有的布局管理器(由layout()返回),然后才能使用新布局调用setLayout()。

我相信我已经解决了这个问题,这不是Qt问题,而是更多的是缺少清除vector<vector<QPushButton*>> buttonGrid对象。 看起来好像没有清除布局,因为附加的QPushButton对象已添加到vector<vector<QPushButton*>>对象上。

代表我这是一个相当菜鸟的错误。

暂无
暂无

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

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