Qt 删除嵌套布局
Qt remove nested layout
我有几个QHBoxLayout
对象嵌套在一个QVBoxLayout
中。我已经查看了许多堆栈溢出问题和答案,但我无法找到完全删除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();
清除小部件内容的最佳和最有效的方法是什么?
我相信我已经解决了这个问题,这不是Qt问题,而是缺乏清除vector<vector<QPushButton*>> buttonGrid
对象。看起来布局没有被清除,因为额外的QPushButton
对象被添加到vector<vector<QPushButton*>>
对象上。
对我来说,这是一个相当新手的错误。
更新: 我推断GameAreaWidgetContents
是一个QScrollArea
.要清除其布局管理器,您可以执行以下操作:
delete ui->GameAreaWidgetContents->layout();
vbox将不再是小部件的布局管理器,任何嵌套的子项都将被Qt父系统自动删除。
从QWidget::setLayout()
上的文档:
如果此小部件上已经安装了布局管理器,QWidget将不允许您安装另一个布局管理器。必须先删除现有的布局管理器(由 layout() 返回),然后才能使用新布局调用 setLayout()。
相关文章:
- 嵌套在类中时无法设置成员数据
- 无法访问嵌套类.类的使用无效
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 在C++中搜索嵌套多映射值
- 在C++中将矢量转换为嵌套地图
- C++嵌套if语句,基本货币交换
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 嵌套的匿名命名空间
- 了解嵌套循环打印星号图案
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 嵌套for循环C++的问题(初学者)
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- 用C#中的并集模拟C++嵌套结构
- 部分专业化和嵌套模板
- 嵌套While循环不起作用(C++问题)
- C++-模板嵌套类的引用初始化无效
- 如何在嵌套类中正确使用友元声明?
- Qt 删除嵌套布局