Qt如何在QtableWidget中检查复选框的状态

3

最近我发现复选框位于QtableWidget项目的中间位置。 但是,我不知道如何检查按钮是否被单击。 您能告诉我如何检查按钮状态吗?

这是我发现的代码:

QWidget *pWidget = new QWidget();
QCheckBox *pCheckBox = new QCheckBox();
QHBoxLayout *pLayout = new QHBoxLayout(pWidget);
pCheckBox->setCheckState(Qt::Checked);
pLayout->addWidget(pCheckBox);
pLayout->setAlignment(Qt::AlignCenter);
pLayout->setContentsMargins(0,0,0,0);
pWidget->setLayout(pLayout);
ui->tableWidget2->setCellWidget(2,2, pWidget);

这个有进展了吗? - froderik
2个回答

1
虽然很晚,但您可以像这样解决它:
auto field = ui->tableWidget2->cellWidget(2, 2, pWidget);

std::cout << qobject_cast<QCheckBox*>(field)->isChecked() << std::endl;

这也适用于其他类型(如QComboBox等)。虽然最好只使用QTableWidgetItem已经具有的复选框功能。
如果您正在使用三态复选框,则此示例可能无效,此时您应该调用:checkState()并将其与Qt :: CheckState进行比较。如果qobject_cast<T>不起作用,则可以使用reinterpret_cast<T>

0

我假设你是这样在QWidgetTable中创建复选框的:

int row...;int column...;
...
QTableWidgetItem *checkBoxItem = new QTableWidgetItem();
checkBoxItem->setCheckState(Qt::Unchecked);
ui->Table->setItem(row, column, checkBoxItem);

您可以像这样在另一个函数中检查与您的小部件对应的项目的状态:
void MainWindow::on_Table_cellClicked(int row, int column)
{
    QTableWidgetItem *checkBoxState = ui->Table->item(row, column);

    if(ui->Table->item(row,column)->checkState())
    {
        checkBoxState->setCheckState(Qt::Unchecked);
        ui->Table->setItem(row, column, checkBoxState);
    }
    else
    {
        checkBoxState->setCheckState(Qt::Checked);
        ui->Table->setItem(row, column, checkBoxState);
    }
}

1
等一下,你为什么要创建一个新的 QTableWIdgetItem - rubenvb
QTableWidgetItem *checkBoxState = new QTableWidgetItem(); 更改为 QTableWidgetItem *checkBoxState = ui->Table->item(row, column); - eyllanesc
你能告诉我们如何检查单元格的类型是复选框还是文本字段等吗? - user889030
我认为你没有意识到这个问题的特殊点,这个特殊点是使用setCellWidget来设置项目,而不是使用ui->Table->setItem来设置项目。我没有测试过,但我猜想以这种方式,ui->Table->item(row, column)将返回一些你没有预期的东西。 - Wade Wang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接