如果您使用类似的东西创建了一个小部件:
QWidget* createCheckBoxWidget(bool checked)
{
QWidget* pWidget = new QWidget();
QCheckBox* pCheckBox = new QCheckBox();
pCheckBox->setChecked(checked);
QHBoxLayout* pLayout = new QHBoxLayout(pWidget);
pLayout->addWidget(pCheckBox);
pLayout->setAlignment(Qt::AlignCenter);
pLayout->setContentsMargins(0,0,0,0);
pWidget->setLayout(pLayout);
return pWidget;
}
然后将其添加到 QTableWidget 中,如下所示:
QTableWidget* tableWidget = new QTableWidget();
tableWidget->setRowCount(1);
tableWidget->setColumnCount(1);
QWidget* checkBox = createCheckBoxWidget(true);
tableWidget->setCellWidget(0, 0, checkBox);
您可以使用以下函数检索它:
QCheckBox* getCheckBoxWidgetFromCell(QTableWidget* table, int row, int col)
{
QCheckBox* checkBox = nullptr;
if (QWidget* w = table->cellWidget(row, col))
{
if (QLayout* layout = w->layout())
{
if (QLayoutItem* layoutItem = layout->itemAt(0))
{
if (QWidgetItem* widgetItem = dynamic_cast<QWidgetItem*>(layoutItem))
{
checkBox = qobject_cast<QCheckBox*>(widgetItem->widget());
}
}
}
}
return checkBox;
}
并像这样访问它的状态:
QCheckBox* checkBox = getCheckBoxWidgetFromCell(tableWidget, 0, 0);
if (checkBox)
{
bool checked = checkBox->isChecked();
}
因此,了解您插入到表格单元格中的对象的层次结构非常重要。
此处的布局是可选的,但您可以控制小部件在单元格内的显示方式。它还表明,一个单元格可以根据需要包含非常复杂的小部件或小部件组。