默认选择第一行,当我移位 - 选择最后一行时,我希望所有行都被选中但不是,它只选择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,则多选功能完美无缺。这就像我的默认选择(由代码完成)被移位点击忽略。
答案 0 :(得分:0)
默认QModelIndex(0,0)
选择属于隐藏列的单元格。即使显示为选定的行,显然它也会影响换档选择。
如果我不隐藏第一列,它可以正常工作。
如果我使用QModelIndex index = model->index(0,1);
,它可以正常工作。
更简单的解决方案是ui->tableView->selectRow(0);