Qt Как узнать, когда установлен флажок при динамическом создании? - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь динамически создать флажок для каждого ресторана в векторе.Я был в состоянии динамически создавать флажки, но я хотел бы знать, какие из них были выбраны.Вот мой код:

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

В настоящее время у меня есть 5 ресторанов, заполненных вектором, и на данный момент у меня это выглядит примерно так:

() McDonalds

() Папа Джон

() Бургер Кинг

() Домино

() Тако Белл

Когда они нажимают кнопку «ОК», яхотел бы знать, какие из них были выбраны.Все они называются thisCheckBox, поэтому я не знаю, как получить каждый конкретный.Как я могу это сделать?Любая помощь очень ценится!

1 Ответ

0 голосов
/ 28 февраля 2019

Простой способ достичь своей цели - изменить цикл создания следующим образом:

// 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;
    }
}

Добавьте это к слотам в объявлении YourWidget.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...