我正在尝试为向量中的每个餐厅动态创建一个复选框。我能够动态创建复选框,但随后我想知道选中了哪些复选框。这是我的代码:
for(unsigned int i = 0; i < restaurantList.size(); i++)
{
QCheckBox *thisCheckBox = new QCheckBox(restaurantList.at(i).GetName());
CTui->verticalLayout->addWidget(thisCheckBox);
}
我目前在向量中填充了5家餐厅,到目前为止,它看起来像这样:
()麦当劳
()爸爸约翰的
()汉堡王
()多米诺骨牌
()塔可钟
当他们单击“确定”按钮时,我想知道选择了哪些。它们都称为thisCheckBox,所以我不知道如何获取每个特定的对象。我怎样才能做到这一点?任何帮助深表感谢!
答案 0 :(得分:0)
实现目标的一种简单方法是修改创建循环,如下所示:
foo: true
然后
// Add this to your widget's class declaration:
std::vector<QCheckBox*> checkBoxes;
然后将处理程序函数添加到for (auto& r : restaurantList) {
auto cb = new QCheckBox(r.GetName());
checkBoxes.push_back(cb);
connect(cb, &QCheckBox::stateChanged, this, &YourWidget::onCheckBoxClicked);
CTui->verticalLayout->addWidget(cb);
}
(可能是这样):
YourWidget
将此添加到void YourWidget::onCheckBoxClicked(int state)
{
// If you wanted to work with the specific checkbox clicked:
// Use QObject::sender() to retrieve a pointer to the QCheckBox,
// and cast it from QObject* to QCheckBox*:
// auto cb = qobject_cast<QCheckBox*>(sender());
// Otherwise, if you don't care which, and want to work with them all:
// Loop over all your checkboxes, doing whatever you want:
for (auto cb : checkBoxes) {
qDebug() << "The checkbox with text" << cb->text() << "has state" << state;
}
}
声明中的插槽中。