我仍在努力使用 QListView,我试图选择视图中的一个特定行,但无法弄清如何实现。
我在 StackOverflow 上发现了一个类似的问题,建议使用模型的 createIndex()
方法,然而这个方法是受保护的(可能曾经是公共的,但现在不是了),所以对我没用。有什么建议吗?
您可以通过调用以下方法来获取任何内容的索引
QModelIndex indexOfTheCellIWant = model->index(row, column, parentIndex);
如Bruno在他的答案中所说,您可以调用setCurrentIndex(indexOfTheCellIWant)
。
如果模型只包含标准项目列表而不是树结构,则更加容易。因为我们可以假设该项是根项 - 没有父项。
QModelIndex indexOfTheCellIWant = model->index(row, column);
使用树形结构会稍微麻烦一些,因为我们不能只指定行和列,我们需要相对于父级来指定。如果您需要了解这个部分,请告诉我,我可以详细解释。
还有一件事要注意,选择是基于单元格而不是行的。所以,如果您想确保当用户选择一个单元格(或者您通过代码选择)时整行都被选择,可以通过设置"selectionBehavior"来实现。
list->setSelectionBehavior(QAbstractItemView::SelectRows);
QAbstractItemView::setCurrentIndex ( const QModelIndex & index )
。它可以设置当前视图的索引,使其成为活动项。void selectRowInQListView(int row, QListView *listView) {
QModelIndex index = listView->model()->index(row, 0);
if (index.isValid()) {
//listView->selectionModel()->select(index, QItemSelectionModel::Select);
//listView->selectionModel()->select(index, QItemSelectionModel::Current);
listView->setCurrentIndex(index);
}
}