QTableWidget复选框获取状态和位置

时间:2015-03-20 21:47:52

标签: c++ qt checkbox qtablewidget

如何获取所有复选框的状态并获取已选中的行和列? Onclick PushButton功能。

    QTableWidget *t = ui->tableWidget;
    t->setRowCount(2);
    t->setColumnCount(2);

    QStringList tableHeader;
    tableHeader<<"item01"<<"item02";
    t->setHorizontalHeaderLabels(tableHeader);

    for (int i = 0; i < t->rowCount(); i++) {
        for (int j = 0; j < t->columnCount(); j++) {
            QWidget *pWidget = new QWidget();
            QHBoxLayout *pLayout = new QHBoxLayout(pWidget);
            QCheckBox *pCheckBox = new QCheckBox();
            pLayout->setAlignment(Qt::AlignCenter);
            pLayout->setContentsMargins(0,0,0,0);
            pLayout->addWidget(pCheckBox);
            pWidget->setLayout(pLayout);
            t->setCellWidget(i, j, pWidget);
        }
    }

当我点击按钮时,我需要获取所有选定的元素,每行包含行,列。

void Widget::on_pushButton_clicked()
{

    // Code here    

    // For example: Selected ["item01", 2]
}

2 个答案:

答案 0 :(得分:1)

我只是迭代所有单元格小部件:

for (int i = 0; i < t->rowCount(); i++) {
    for (int j = 0; j < t->columnCount(); j++) {
        QWidget *pWidget = t->cellWidget(i, j);
        QCheckBox *checkbox = pWidget->findChild<QCheckBox *>();
        if (checkbox && checkbox->isChecked())
            qDebug() << t->horizontalHeaderItem(j)->text() << i;
    }
}

答案 1 :(得分:0)

自从我使用Qt进行编程以来已经有一段时间了,但我相信没有这么好的方法。我已成功完成所有这些解决方案。

1)迭代所有单元格小部件,如svlasov的回答说。这有一些可扩展性问题。

2)创建哈希映射,其中指向按钮的指针是键,所需的索引是值。您可以使用QObject::sender()点击哪个按钮。

3)创建按钮时,将所需的索引存储在按钮上(参见setProperty() in QObject's documentation)。例如,

button->setProperty("x index", x);  

slot中,使用QObject::sender()获取指向该按钮的指针然后调用

button->property("x");

我一般认为第三种选择是最干净,表现最好的。

请注意,这些答案也适用于QTreeWidgets和QListWidgets。