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

C++ 为什么QTableView扩展选择会忽略我的默认选定行?,c++,qt,qtableview,C++,Qt,Qtableview,默认情况下会选择第一行,当我按住shift键选择最后一行时,我希望所有行都会被选中,但不会,它只选择QTableView的可见行 我有一个QTableView,显示数据库模型中的数据。它配置为允许扩展选择(ctrl、shift等)和仅选择行(而不是单元格)。内容会根据其他参数进行更改,无论何时更新模型,默认情况下都会选择QTableView的第一行 ui->tableView->setModel(model); ui->tableView->setColumnHidde

默认情况下会选择第一行,当我按住shift键选择最后一行时,我希望所有行都会被选中,但不会,它只选择QTableView的可见行

我有一个QTableView,显示数据库模型中的数据。它配置为允许扩展选择(ctrl、shift等)和仅选择行(而不是单元格)。内容会根据其他参数进行更改,无论何时更新模型,默认情况下都会选择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);
我隐藏垂直标题是因为没有显示任何内容,我隐藏第一列是因为它与用户无关

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


如果手动选择第一行(或任意一行),则下一次按住shift键的单击将非常有效。如果我按一下ctrl键,多重选择效果会很好。这就像我的默认选择(由代码完成)被shift单击忽略一样。

默认的
QModelIndex(0,0)
选择一个作为隐藏列一部分的单元格。即使显示为选定行,显然也会弄乱换档选择

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

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

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