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

标签 c++ qt qtableview

默认选择第一行,当我按住 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);

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

第一行显示为选中状态,我什至记录了焦点的变化并且 tableView->selectionModel()->selectedRows() 总是好的(即返回 QModelIndex(0 ,0))。但是,当我按住 Shift 键并单击最后一行时,就好像根本没有选择第一行。

如果我手动选择第一行(或任何一行),下一次 shift-click 将完美运行。如果我按住 ctrl 单击,则多选效果很好。这就像我的默认选择(由代码完成)被 shift-click 忽略了。

最佳答案

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

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

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

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

关于c++ - 为什么 QTableView 扩展选择会忽略我默认选择的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44303214/

相关文章:

c++ - 如何过滤 QAbstractTableModel 模型

c++:遍历 std::hash_map 的顺序

c++ - Qt 模型 View 编程。 QAbstractItemModel 和 QAbstractListModel。索引()和父级()

QTableView 非常慢(即使只有 3000 行)

c++ - Qt 中 QStandardItemModel 中的重复行

c++ - 在 Qtreeview 中从 parent 那里得到 child

python - 如何从 pyqt 中的 qtableview 中删除行?

c++ - 如何禁用 QDoubleSpinBox 中的向上/向下按钮

c++ - 从 C++(或 C)回调调用 python 方法

c++ - 我如何在源代码中找到一个仍在等待的被破坏的线程?