2016-06-15 112 views
0

我有一个QTableView的一些数据。数据有时会改变,然后我需要刷新TableView。刷新后,光标丢失位置。如果它在5位置(行),刷新超出tableview(或第一行)之后。我想让它回到5,但它不起作用。QTableView和设置指针位置

我通过“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); 

回答

3

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

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

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

+0

好了,我怎么可以设置一个指向一个特定的位置。因为通过QModelIndex index = ui-> tableView-> currentIndex(); int row = index.row();我知道最后一个活跃的位置。 – exo

+0

您可以使用'row()'值通过'index(...)'从模型中获取一个新的'QModelIndex'并将其用于'setCurrentIndex()'。 –

+0

谢谢你的帮助。我仍然有问题。我做了这个构造'QPoint point(row,0);''index = ui-> tableView-> indexAt(point);''ui-> tableView-> setCurrentIndex(index);'。现在行被选中,但位置错误。始终保持在第一个可见的行。 – exo