如何获取所有复选框的状态并获取已选中的行和列? 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]
}
答案 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。