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