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

时间:2013-11-30 06:04:16

标签: qt qtablewidget qtablewidgetitem qcheckbox

最近我找到了复选框放在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);

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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);
    }
}