首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QT5.3:访问/返回/调用动态创建的复选框(?)

QT5.3:访问/返回/调用动态创建的复选框(?)
EN

Stack Overflow用户
提问于 2014-11-05 20:22:43
回答 1查看 656关注 0票数 1

因此,我已经达到了知识的极限,当涉及到Qt和C++时,我猜想。我正在根据来自QScrollArea的输入在QComboBox中创建复选框。根据在QComboBox中选择的值,将创建特定数量的复选框。一旦创建了这些复选框,我就很难理解如何在创建和调用它们的函数之外与它们交互(在我的例子中,只需检查它们是否被选中)。如果按钮是静态的,我知道如何处理它们,但是由于复选框是动态的(这是正确的词吗?)而且可以改变,我不知道该怎么办。下面是关于如何创建复选框的代码片段。如果我现在只想检查是否选中了任何一个框,我如何做到这一点。我可以以某种方式“返回”或“调用”另一个函数中创建的复选框吗?我知道我只需要循环遍历数组并进行检查,我只是不知道如何将复选框数组放入另一个函数,也不知道如何在下面的函数中返回复选框。

谢谢你的帮助!

代码语言:javascript
复制
void MyProgram::create_checkboxes(QString opnum)
{
QWidget* MDAcheckboxes = new QWidget(ui->MDA);
QVBoxLayout* MDAlayout = new QVBoxLayout(MDAcheckboxes);
QCheckBox *MDAmycheckBox[9];
QList<QString> boxes;

if (opnum == "640")
{
    boxes << "16-1" << "16-2";

    for (int i = 0; i < 2; i++)
    {
    MDAmycheckBox[i] = new QCheckBox(MDAcheckboxes);
    MDAmycheckBox[i]->setText(boxes[i]);
    MDAlayout->addWidget(MDAmycheckBox[i]);
    }
    ui->MDA->setWidget(MDAcheckboxes);
}
else if (opnum == "645")
{
    boxes << "13-01"<<"13-2"<<"13-3"<<"13-4"<<"13-5";

    for (int i = 0; i < 5; i++)
    {
    MDAmycheckBox[i] = new QCheckBox(MDAcheckboxes);
    MDAmycheckBox[i]->setText(boxes[i]);
    MDAlayout->addWidget(MDAmycheckBox[i]);
    }
    ui->MDA->setWidget(MDAcheckboxes);
}
else if (opnum == "650")
{

    boxes << "13-6"<<"13-7"<<"13-8"<<"13-9"<<"13-10"<<"13-11"<<"13-12"<<"13-13"<<"13-14";
    for (int i = 0; i < 9; i++)
    {
    MDAmycheckBox[i] = new QCheckBox(MDAcheckboxes);
    MDAmycheckBox[i]->setText(boxes[i]);
    MDAlayout->addWidget(MDAmycheckBox[i]);
    }
    ui->MDA->setWidget(MDAcheckboxes);
}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-05 20:24:38

您的所有checkBoxes都应该有一个父级。在这种情况下,您将能够在findChildren中找到它。如果您确信该应用程序没有任何其他复选框,并且groupBox不返回您不需要的复选框,也可以不使用findChildren

试试这个:

代码语言:javascript
复制
QList<QCheckBox *> allButtons = ui->groupBox->findChildren<QCheckBox *>();
qDebug() <<allButtons.size();
for(int i = 0; i < allButtons.size(); ++i)
{
    if(allButtons.at(i)->isChecked())
        qDebug() << "Use" << allButtons.at(i)->text()<< i;//or what you need
}

一般情况下:

代码语言:javascript
复制
QList<QCheckBox*> allButtons = parentOfCheckBoxes->findChildren<QCheckBox *>();

此外,findChildren允许您查找具有特殊objectName的子级,这在某些情况下可能很有用。注意,可以将相同的objectName设置为不同的对象。

http://qt-project.org/doc/qt-5/qobject.html#findChildren

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26766399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档