2016-08-02 9 views
0

Я использую C++, Qt 4.8.7, Visual Studio 2013, Windows 7. Приложение моего графического интерфейса содержит QTableView. Я добавил слоты, которые обрабатывают сигналы beginResetModel() и reset() от моей модели. Обычно эти слоты называются, но вертикальный свиток по-прежнему прокручивается всегда вверху всего списка. Как я могу это исправить? Мне нужно восстановить текущую позицию. Обратите внимание, что во время сброса строка не удаляется. Таким образом, можно изменить содержимое старых строк и/или добавить новые строки.Восстановление вертикальной прокрутки в QTableView

//before reset 
current_top_row_number_ = table_view_->rowAt(0); 

//after reset 
table_view_->scrollTo(log_model_->index(current_top_row_number_, 0), QAbstractItemView::PositionAtTop); 

ответ

0

Try очереди вызова в scrollTo, например,

class MyWidget : public MyWidget { 
    Q_OBJECT 
    int current_top_row_number_; 
    QTableView table_view_; 
    Q_SLOT void onResetModel() { 
    table_view_->scrollTo(log_model_->index(current_top_row_number_, 0), 
          QAbstractItemView::PositionAtTop); 
    } 
    ... 
public: 
    MyWidget(QWidget * parent = nullptr) : QWidget{parent} {  
    connect(table_view_, SIGNAL(modelReset()), SLOT(onResetModel(), Qt::QueuedConnection); 
    } 
};