[英]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();
清除窗口小部件内容的最佳,最有效的方法是什么?
更新 :我推断GameAreaWidgetContents
是QScrollArea
。 要清除其布局管理器,您可以执行以下操作:
delete ui->GameAreaWidgetContents->layout();
vbox将不再是窗口小部件的布局管理器,并且所有嵌套的子代将由Qt育儿系统自动删除。
如果此窗口小部件上已经安装了布局管理器,则QWidget将不允许您安装另一个。 必须先删除现有的布局管理器(由layout()返回),然后才能使用新布局调用setLayout()。
我相信我已经解决了这个问题,这不是Qt问题,而是更多的是缺少清除vector<vector<QPushButton*>> buttonGrid
对象。 看起来好像没有清除布局,因为附加的QPushButton
对象已添加到vector<vector<QPushButton*>>
对象上。
代表我这是一个相当菜鸟的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.