因此,我已经达到了知识的极限,当涉及到Qt和C++时,我猜想。我正在根据来自QScrollArea的输入在QComboBox中创建复选框。根据在QComboBox中选择的值,将创建特定数量的复选框。一旦创建了这些复选框,我就很难理解如何在创建和调用它们的函数之外与它们交互(在我的例子中,只需检查它们是否被选中)。如果按钮是静态的,我知道如何处理它们,但是由于复选框是动态的(这是正确的词吗?)而且可以改变,我不知道该怎么办。下面是关于如何创建复选框的代码片段。如果我现在只想检查是否选中了任何一个框,我如何做到这一点。我可以以某种方式“返回”或“调用”另一个函数中创建的复选框吗?我知道我只需要循环遍历数组并进行检查,我只是不知道如何将复选框数组放入另一个函数,也不知道如何在下面的函数中返回复选框。
谢谢你的帮助!
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);
}
}发布于 2014-11-05 20:24:38
您的所有checkBoxes都应该有一个父级。在这种情况下,您将能够在findChildren中找到它。如果您确信该应用程序没有任何其他复选框,并且groupBox不返回您不需要的复选框,也可以不使用findChildren。
试试这个:
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
}一般情况下:
QList<QCheckBox*> allButtons = parentOfCheckBoxes->findChildren<QCheckBox *>();此外,findChildren允许您查找具有特殊objectName的子级,这在某些情况下可能很有用。注意,可以将相同的objectName设置为不同的对象。
http://qt-project.org/doc/qt-5/qobject.html#findChildren
https://stackoverflow.com/questions/26766399
复制相似问题