2016-06-15 28 views
0

私はいくつかのデータを持つQTableViewを持っています。データが変更されることがあり、TableViewをリフレッシュする必要があります。リフレッシュ後、カーソルは位置を失います。それが5位置(行)にあった場合、リフレッシュがtableview(または最初の行)から外れた後。私はそれを5に戻したいが、それはうまくいかない。QTableViewとポインタの位置を設定

私は「index = ui->tableView->currentIndex()」で最後の位置を保存して何が悪い「ui->tableView->setCurrentIndex(index)

ことによってそれを取り戻しますか? setModelを呼び出すことにより、

//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

、あなたはモデルを更新し、したがって、あなたの指数は、もはや有効ではないかもしれない:

注:モデルインデックスはすぐに使用し、その後、廃棄されなければなりません。 は、モデルの構造を変更したりアイテムを削除したりするモデル を呼び出すと、有効なままになるようにインデックスに依存しないでください。 時間の経過とともにモデルインデックスを保持する必要がある場合は、QPersistentModelIndexを使用します。

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

+0

[OK]を、どのように私は、特定の位置へのポインタを設定することができます。 QModelIndexインデックス= 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

関連する問題