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);
4

2 回答 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>.

于 2015-03-30T12:00:32.467 回答
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);
    }
}
于 2018-12-13T15:48:04.757 回答