我正在尝试使用以下代码在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);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我来自之前的位置,我设法做出选择,但只有一个单元格会被选中,所以我正在尝试上面这一点,以确保整个行被正确选择,就好像用户会点击了它。
非常感谢任何帮助!
答案 0 :(得分:2)
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);
答案 1 :(得分:0)
view.setCurrentIndex(model.index(0,0,view.rootIndex()));