对于具有 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);
我有以下代码,创建了一个包含两个单元格的 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);