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

时间:2019-07-26 00:03:00

标签: c++ qt qtablewidget qt-signals qtablewidgetitem

我有以下代码,用两个单元格创建一个表:

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信号在任何一个单元改变时都会发出,但事实并非如此:它仅适用于第一个单元,不适用于第二个单元。

为什么没有cellChanged的单元格发出QTableWidgetItem信号?

1 个答案:

答案 0 :(得分:0)

请勿设置Qt::ItemNeverHasChildren标志。由于某些原因,即使您的商品实际上没有子商品,也会与相关的信号混淆。以下代码按预期工作:

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