Qt如何动态创建复选框时知道该复选框被选中?

时间:2019-02-27 23:04:21

标签: qt checkbox dynamic

我正在尝试为向量中的每个餐厅动态创建一个复选框。我能够动态创建复选框,但随后我想知道选中了哪些复选框。这是我的代码:

for(unsigned int i = 0; i < restaurantList.size(); i++)
{
   QCheckBox *thisCheckBox = new QCheckBox(restaurantList.at(i).GetName());
   CTui->verticalLayout->addWidget(thisCheckBox);
}

我目前在向量中填充了5家餐厅,到​​目前为止,它看起来像这样:

()麦当劳

()爸爸约翰的

()汉堡王

()多米诺骨牌

()塔可钟

当他们单击“确定”按钮时,我想知道选择了哪些。它们都称为thisCheckBox,所以我不知道如何获取每个特定的对象。我怎样才能做到这一点?任何帮助深表感谢!

1 个答案:

答案 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; } } 声明中的插槽中。