有什么方法可以动态添加复选框,以便我可以在定义范围之外访问它们及其检查状态?

Is there any way to add Chekboxes dynamically that I can access them and their checkstate out of their definition scope?

我想动态添加复选框。我找到了一些有用的链接,但每个链接都有一个我无法解决的问题。

例如在 this link 中,我们可以动态创建和添加 QCheckBoxes,但我无法在它们的定义范围之外访问它们 (for)。

另一种方法是使用 QListWidgetItemsetCheckState。但它有一个非常大的问题!当我点击 CheckState 时,它并没有注意到它,只是专注于它所关注的项目!!!! {在这些链接中介绍了这个问题但没有解决方案:this and }

有什么方法可以动态添加 Chekboxes 以便我可以在定义范围之外访问它们及其检查状态?

您需要保存指向您创建的复选框的指针。例如,将 QVector<QCheckBox> checkBoxes; 添加到您的小部件,然后将此指针附加到向量。

结果代码可能如下所示:

在header中:

YourWidget : public QWidget {
....
QVector<QCheckBox*> checkboxes;
....

并在来源中:

for (int i = 0; i < 5; i++) {
    QCheckBox *box = new QCheckBox;
    layout->addWidget(box);
    checkboxes.append(box);
}

这样您就可以访问您的复选框:checkboxes[0]->setChecked(true); 或 smth

并且不要忘记在小部件的析构函数中释放分配给复选框的内存(如果将它们添加到布局中则不需要这样做)

for (int i = 0; i < checkboxes.size(); i++) {
    delete checkboxes[i];
}