如何使用指向每个元素的指针向量删除qcheckbox数组?
How would I delete an array of QCheckBoxes using a vector of pointers to each element?
在我当前的项目中,我有一个qcheckbox数组,它是我在运行时根据用户提供的尺寸创建的。每次用户单击"Generate"按钮时,将收集他们输入的维度,并创建一个qcheckbox数组。它在以下代码中完成:
void MainWindow::on_generateBoxes_clicked()
{
int x_dim = ui->xDim->value();
int y_dim = ui->yDim->value();
int z_dim = ui->zDim->value();
for(int i = 0; i < x_dim; ++i){
for(int j = 0; j < y_dim; ++j){
checkBoxVector.append(new QCheckBox( ui->dim1 ));
checkBoxVector.last()->setGeometry(i * 20, j * 20, 20, 20);
}
}
}
checkBoxVector是在另一个源文件中声明的指针的全局数组:
QVector<QCheckBox*> checkBoxVector;
我的问题是,我如何通过checkBoxVector来删除每个QCheckBox?由于数组的前一个维度是局部变量,一旦函数返回就会丢失,当它被重新调用时,我怎么知道要删除多少元素?
如果用户按下"生成"按钮两次,将会有重叠的QCheckBoxes,所以我需要在每次调用函数时擦除它们。(而且,没有人想要内存泄漏!)
首先删除vector中的所有元素(QCheckBoxes),然后清除vector:
qDeleteAll(checkBoxVector);
checkBoxVector.clear();
因为你是在给vector添加复选框指针,所以仅仅清除vector并不会删除复选框。
您可以使用成员函数clear()
来清除向量,即
checkBoxVector.clear();
这将删除所有内容,以便您可以再次填充。维数不重要,因为元素存储在"1d"中,QVector知道有多少个元素。
编辑:我应该更仔细地阅读,这将删除指针。你想要的是遍历每个指针,删除它指向的对象,即vector<QCheckBoxes*>::iterator itr = checkBoxVector.begin();
while(itr != checkBoxVector.end())
{
delete *(*(itr));
++itr;
}
只要使用QVector < QSharedPointer<QCheckBox> >
,所有内容都会自动删除。
添加将看起来像这样:
CheckBoxes.append(QSharedPointer<QCheckBox>(new QCheckBox()));
您想要删除每个QCheckBox?
foreach (QCheckBox *checkBox, checkBoxVector)
delete checkBox;
//QVector::clear() // clear does not release objects
相关文章:
- 函数向量_指针有不同的原型,我可以构建一个吗
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 使用向量类的c++指针
- 如何使用C++初始化向量;脚本化值不是数组、指针或矢量错误
- 如何更改唯一指针向量的可见性
- C++ 独特指针练习的向量
- C 中的向量指针的清晰图
- 当向量位于内部类中时,如何删除指向对象的向量指针
- std::向量指针
- 指向结构体的向量指针错误
- 删除指向指针的向量指针时出错
- 映射不同类型的向量指针
- 在c++中传递向量指针
- 虚拟类的向量:指针是干净的方法吗
- 如何从另一个向量/对象集构造新的向量/指针集
- 模型视图控制器- c++向量指针,太多的传递
- 为什么向量指针占用这么多内存?
- 删除条目向量指针的静态映射c++
- 复向量指针
- c++数组向量指针的初始化