c++ - 我如何使用指向每个元素的指针 vector 删除 QCheckBoxes 数组?

标签 c++ qt

在我当前的项目中,我有一个 QCheckBoxes 数组,它们是我在运行时根据用户的尺寸创建的。每次用户单击“生成”按钮时,都会收集他们输入的维度,并创建一个 QCheckBoxes 数组。它是在以下代码中完成的:

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?由于数组的先前维度是局部变量,一旦函数返回就会丢失,当它被重新调用时我怎么知道要删除多少元素?

如果用户按下“生成”按钮两次,就会出现重叠的 QCheckBox,因此我需要在每次调用该函数时将它们全部删除。 (另外,没有人想要内存泄漏!)

最佳答案

首先删除vector中的所有元素(QCheckBoxes),然后清空vector:

qDeleteAll(checkBoxVector);
checkBoxVector.clear();

因为您正在向 vector 添加复选框指针,所以仅清除 vector 不会删除复选框。

关于c++ - 我如何使用指向每个元素的指针 vector 删除 QCheckBoxes 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6636963/

相关文章:

android - 如何作为模块缓冲读/写数据

c++ - VS 2012 与 VS 2010 的互操作性

c++ - 如何使用 std::bsearch 的成员函数

c++ - 如何使用c++类的方法作为回调函数

c++ - 线程通信的 myDesign 是否可以接受?

qt - TextField 的动态验证器/运行时更改验证器

c++ - 在使用 vs2005 的项目中包含一个在 vs2010 中编译的 .lib 文件

c++ - 我应该在 Xcode 的什么地方定义 DISALLOW_COPY_AND_ASSIGN 宏

c++ - Windows 7 异常代码 : 0xc0000409

c++ - 线程完成后删除Qt Thread中的对象