QTableWidget Checkbox 获取状态和位置
QTableWidget Checkbox get state and location
如何获取所有checkbox的状态和checked的行列?
Onclick 按钮函数。
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]
}
我只是遍历所有单元格小部件:
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;
}
}
我已经有一段时间没有使用 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。
如何获取所有checkbox的状态和checked的行列? Onclick 按钮函数。
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]
}
我只是遍历所有单元格小部件:
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;
}
}
我已经有一段时间没有使用 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。