为什么 QTableView 扩展选择会忽略我默认选择的行?

Why QTableView extended selection ignores my default selected row?

默认情况下,第一行是 selected,当我 shift-select 最后一行时,我希望所有行都将被 selected 但不是,只有 selects QTableView 的可见行.

我有一个 QTableView 显示来自 database-model 的数据。它被配置为允许扩展 selection(ctrl、shift 等)和仅 select 行(不是单元格)。内容根据其他参数而变化,每当我更新模型时,默认情况下我 select 我的 QTableView 的第一行。

ui->tableView->setModel(model);

ui->tableView->setColumnHidden(UidColumn, true);

ui->tableView->setSelectionMode(QAbstractItemView::ExtendedSelection);
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);

ui->tableView->verticalHeader()->hide();
ui->tableView->setAlternatingRowColors(true);

// This is done whenever the content changes
QModelIndex index = model->index(0,0);
ui->tableView->setCurrentIndex(index);

我隐藏垂直 headers 因为那里没有显示,我隐藏第一列因为它与用户无关。

第一行显示为 selected,我什至记录了焦点的变化并且 tableView->selectionModel()->selectedRows() 总是好的(即返回 QModelIndex(0,0))。但是当我在最后一行执行 shift-click 时,就好像第一行根本就没有 selected。

如果我手动 select 第一行(或任何行),下一个 shift-click 将完美运行。如果我执行 ctrl-click,multiselection 将完美运行。这就像我的默认 selection(由代码完成)被 shift-click.

忽略

默认值 QModelIndex(0,0) 选择属于隐藏列一部分的单元格。即使显示为选定的行,显然它会弄乱 shift-selection。

如果我不隐藏第一列,它工作正常。

如果我使用 QModelIndex index = model->index(0,1); 它工作正常。

一个更简单的解决方案ui->tableView->selectRow(0);