对于具有 QTableWidgetItem 的单元格,不会发出 QTableWiget::cellChanged 信号

The QTableWiget::cellChanged signal is not emitted for cells with a QTableWidgetItem

我有以下代码,创建了一个包含两个单元格的 table:

QTableWidget table(2, 1);
QObject::connect(&table, &QTableWidget::cellChanged, [](int column, int row) {
    qDebug() << column << row;
});

auto item = new QTableWidgetItem();
item->setData(Qt::DisplayRole, 42);
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled | Qt::ItemNeverHasChildren);
table.setItem(1, 0, item);

我希望 cellChanged 信号在任何单元格发生变化时发出,但事实并非如此:它仅适用于第一个单元格,不适用于第二个单元格。

为什么具有 QTableWidgetItem 的细胞不发出 cellChanged 信号?

不要设置 Qt::ItemNeverHasChildren 标志。由于某些原因,即使您的物品实际上没有 children,它也会干扰相关信号。以下代码按预期工作:

QTableWidget table(2, 1);
QObject::connect(&table, &QTableWidget::cellChanged, [](int column, int row) {
    qDebug() << column << row;
});

auto item = new QTableWidgetItem();
item->setData(Qt::DisplayRole, 42);
item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsEnabled);
table.setItem(1, 0, item);