请运行以下代码(我使用的是 Qt 5.9):
QTableWidget* tableWidget = new QTableWidget(2, 2, nullptr);
tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
connect(tableWidget->selectionModel(), &QItemSelectionModel::selectionChanged,
[&](const QItemSelection& selected, const QItemSelection& deselected)
{ qDebug() << "selected =" << selected << endl << "deselected =" << deselected; });
tableWidget->show();
QTimer::singleShot(10000, [=](){ tableWidget->removeRow(0); });
在 10 秒内,选择两行中的第一行。您将看到调试输出。它将显示您单击选择了第 0 行。然后,10 秒后,第 0 行被自动删除。调试输出现在显示第 1 行被选中,第 0 行被取消选中。
后者对我没有任何意义。删除第 0 行时,我希望之后会选择“新”第 0 行。此外,视觉选择的行仍然是第 0 行,而第 1 行根本不存在。
自定义模型和通用视图也会发生这种情况,并通过指向不存在的行使我的应用程序崩溃。
这是期望的行为吗?我的误解在哪里?