在程序中以编程方式选择QTreeView中的一行

24

我有一个使用QFileSystemModel作为模型的QTreeView。

QTreeView的SelectionBehavior设置为SelectRows。

在我的代码中,我读取一个数据集来选择并通过以下方式进行选择:

idx = treeview->model()->index(search); 
selection->select(idx, QItemSelectionModel::Select);

这个选择的是单元格,而不是整行。我已经添加了一个愚蠢的解决方法,但更希望以正确的方式解决。

for (int col=0; col< treeview->model()->columnCount(); col++) 
{ 
   idx = treeview->model()->index(search, col); 
   selection->select(idx, QItemSelectionModel::Select); 
} 

那是唯一的方法吗?


4
"selection" 是什么? - ssc
2
我假设 selection 是一个 QItemSelectionModel - altendky
2
我的猜测是selection指的是treeview->selectionModel() - Donald Duck
2个回答

31

如果您想选择整行数据,您应该使用以下代码:

selection->select(idx, QItemSelectionModel::Select | QItemSelectionModel::Rows);

请注意,有时您可能需要首先清除所选内容:

selection->select(idx, QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);

4
您也可以使用QItemSelectionModel :: ClearAndSelect而不是QItemSelectionModel :: Select,在选择之前自动清除选择项。 - Gojir4
这个答案优越的原因在于QItemSelectionModel::Rows的简单性。编辑答案以包括评论建议。 - Phlucious

12

您还可以使用QItemSelection选择整行:

selection->select (
    QItemSelection (
        treeview->model ()->index (search, 0),
        treeview->model ()->index (search, treeview->model ()->columnCount () - 1)),
    QItemSelectionModel::Select);

如果您希望用户单击时也能选择行,请设置选择行为:

treeview->setSelectionBehavior (QAbstractItemView::SelectRows)

尝试您的解决方案。附注:已经设置了SelectRows行为(如问题第二行所述)。 - the JinX

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