我有一些带有一些数据的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);
答案 0 :(得分:3)
通过调用setModel
,您更新模型,因此您的索引可能不再有效:
注意:应立即使用模型索引然后丢弃。您 调用模型后,不应依赖索引保持有效 更改模型结构或删除项目的函数。如果 你需要随着时间的推移保持模型索引使用QPersistentModelIndex。