mercredi 10 mai 2017

How to check in Qt if 1 checkbox is checked in multiple checkboxes?

I have a table with some rows, each row has a checkbox in the first column. This is how I created my table:

void mytable::setup(QMap<int, Data> mydata){
    ui.table->setHorizontalHeaderItem(0, new QTableWidgetItem(" "));
    ui.table->setHorizontalHeaderItem(1, new QTableWidgetItem("SECOND"));
    ui.table->setRowCount(mydata.size());
    ui.table->setColumnCount(2);

    for (int i = 0; mydata.size() > i; i++){
        Data dt = mydata.value(i);
        QTableWidgetItem *itemCheckbox = new QTableWidgetItem(" ");
        itemCheckbox->setCheckState(Qt::Unchecked);
        ui.table->setItem(i, 0, itemCheckbox);
        itemCheckbox->setData(Qt::ItemDataRole::UserRole, dt.doid);

        QTableWidgetItem *itemsecond = new QTableWidgetItem("SECOND");
        itemsecond->setData(Qt::ItemDataRole::DisplayRole, mydata.id);
        ui.table->setItem(i, 1, itemsecond);
    }
}

Once I uncheck a certain checkbox, I need to check if all the checkboxes are unchecked. This is my algorithm:

void mytable::checkbox_checked(QTableWidgetItem* checkbox) {
    if (checkbox->column() == 0) {
        if (checkbox->checkState() == 2) {
            //do something;
        }
        else if (checkbox->checkState() == 0) {
            bool one_checked = false;
            for (int k = 0; k < ui.table->rowCount(); k++) {
                if (ui.table->item(k, 0)->checkState() == 2) {
                    one_checked = true;
                    break;
                }
            }
            if (one_checked == false) {
                //do somethings;
            }
        }
    }
}

This algorithm causes some troubles. Do you have any other solution for this? that would be good if we don't use for loop.




Aucun commentaire:

Enregistrer un commentaire