QTableView并设置指针位置

时间:2016-06-15 06:09:58

标签: c++ qt qtableview

我有一些带有一些数据的QTableView。数据有时会发生变化,然后我需要刷新TableView。刷新后,光标丢失位置。如果它在5位置(行),则刷新后不在tableview(或第一行)。我想要它回到5,但它不起作用。

我通过“index = ui->tableView->currentIndex()”保存了最后一个位置并通过“ui->tableView->setCurrentIndex(index)”将其取回

怎么了?

//save last cursor(row) position
QModelIndex index = ui->tableView->currentIndex();

//create basic model with my data
myModel = new MyModel();

//insert my model to sortfilterproxymodel and then sort it
QSortFilterProxyModel *sort_filter = new QSortFilterProxyModel(this);
sort_filter->setSourceModel(myModel);
sort_filter->setSortCaseSensitivity(Qt::CaseInsensitive);
sort_filter->sort(0, Qt::AscendingOrder);       //sort by name
sort_filter->sort(5, Qt::DescendingOrder);      //sort by surename

//insert my data to tableview
ui->tableView->setModel(sort_filter);
ui->tableView->hideColumn(5);

//return it back to its original position
ui->tableView->setCurrentIndex(index);

1 个答案:

答案 0 :(得分:3)

通过调用setModel,您更新模型,因此您的索引可能不再有效:

  

注意:应立即使用模型索引然后丢弃。您   调用模型后,不应依赖索引保持有效   更改模型结构或删除项目的函数。如果   你需要随着时间的推移保持模型索引使用QPersistentModelIndex。

http://doc.qt.io/qt-5/qmodelindex.html#details