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

时间:2017-06-01 09:09:56

标签: c++ qt qtableview

默认选择第一行,当我移位 - 选择最后一行时,我希望所有行都被选中但不是,它只选择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);

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

第一行显示为已选中,我甚至记录了焦点的变化,tableView->selectionModel()->selectedRows()总是好的(即返回QModelIndex(0,0))。但是,当我按住Shift键点击最后一行时,就好像第一行从未被选中一样。

如果我手动选择第一行(或任何行),则下一次shift-click将完美地运行。如果我执行ctrl-click,则多选功能完美无缺。这就像我的默认选择(由代码完成)被移位点击忽略。

1 个答案:

答案 0 :(得分:0)

默认QModelIndex(0,0)选择属于隐藏列的单元格。即使显示为选定的行,显然它也会影响换档选择。

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

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

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