为什么 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);
默认情况下,第一行是 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);