如何在QListView中选择一行

17

我仍在努力使用 QListView,我试图选择视图中的一个特定行,但无法弄清如何实现。

我在 StackOverflow 上发现了一个类似的问题,建议使用模型的 createIndex() 方法,然而这个方法是受保护的(可能曾经是公共的,但现在不是了),所以对我没用。有什么建议吗?

3个回答

27

您可以通过调用以下方法来获取任何内容的索引

QModelIndex indexOfTheCellIWant = model->index(row, column, parentIndex);

如Bruno在他的答案中所说,您可以调用setCurrentIndex(indexOfTheCellIWant)

如果模型只包含标准项目列表而不是树结构,则更加容易。因为我们可以假设该项是根项 - 没有父项。

QModelIndex indexOfTheCellIWant = model->index(row, column);

使用树形结构会稍微麻烦一些,因为我们不能只指定行和列,我们需要相对于父级来指定。如果您需要了解这个部分,请告诉我,我可以详细解释。

还有一件事要注意,选择是基于单元格而不是行的。所以,如果您想确保当用户选择一个单元格(或者您通过代码选择)时整行都被选择,可以通过设置"selectionBehavior"来实现。

list->setSelectionBehavior(QAbstractItemView::SelectRows);

这仍然没有回答如何选择第4行的问题。问题陈述为“尝试选择一个特定的行” - 您提到了“parentIndex”,但没有解释 - 这使您的回答毫无意义。 - Nishi

3

1
谢谢,我不知道这个方法。但是我仍然不清楚如何选择一行。在文档中,写着要使用createIndex()方法,但由于它是受保护的方法,我无法使用它。QModelIndex的构造函数也不允许我指定一行。还有其他方法吗? - laurent

0
从 QListView 的模型中获取 QModelIndex 实例并将其选中:
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);
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接