1

我正在尝试使用以下代码在 QTreeView 组件中选择一整行:

const QModelIndex topLeft = model->index(0, 0);
const QModelIndex bottomRight = model->index(model->rowCount(), model->columnCount());
ui->hidDescriptorView->selectionModel()->selection().select(topLeft, bottomRight);

我有点无能为力,一直在使用 const_cast 等四处寻找以尝试使选择正常工作,但编译器给了我以下错误:

/.../mainwindow.cpp:93: error: member function 'select' not viable: 'this' argument has type 'const QItemSelection', but function is not marked const
            ui->hidDescriptorView->selectionModel()->selection().select(topLeft, bottomRight);
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

我来自前一点,我设法进行了选择,但只有一个单元格会被选中,所以我正在尝试上述方法以确保正确选择了整行,就好像用户会点击它一样.

任何帮助将非常感激!

4

2 回答 2

3

selection() 的签名是

const QItemSelection selection () const

即,您不能就地修改 QItemSelection,因为它是一个 const 副本。作为副本,无论如何修改都不会产生影响。

相反,创建一个副本(或者只创建一个新的 QItemSelection)并通过 select() 传递它:

QItemSelection selection = view->selectionModel()->selection();
selection.select(topLeft, bottomRight);
view->selectionModel()->select(selection, QItemSelectionModel::ClearAndSelect);

正如您提到的要选择行,但可能有更简单的方法:

view->selectionModel()->select(topLeft, QItemSelectionModel::ClearAndSelect|QItemSelectionModel::Rows);

要让用户的选择扩展到整行:

view->setSelectionBehavior(QAbstractItemView::SelectRows);
于 2013-05-16T05:08:50.217 回答
0

view.setCurrentIndex(model.index(0, 0, view.rootIndex()));

于 2020-12-10T02:40:04.760 回答