Qt如何在QtableWidget中选中状态复选框



最近我发现了复选框放置在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);

虽然这已经很晚了,但您可以这样解决:

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>

我假设您在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);
    }
}

最新更新