2016-08-02 3 views
0

C++, Qt 4.8.7, Visual Studio 2013, Windows 7을 사용합니다. 내 GUI 응용 프로그램에 QTableView이 포함되어 있습니다. 내 모델의 beginResetModel()reset() 신호를 처리하는 슬롯을 추가했습니다. 이러한 슬롯은 일반적으로 호출되지만 세로 스크롤은 항상 전체 목록의 맨 위로 스크롤됩니다. 어떻게 해결할 수 있습니까? 나는 현재의 위치를 ​​복원해야합니다. 재설정 중에는 행이 h 제되지 않습니다. 따라서 이전 행의 내용을 변경하거나 새 행을 추가 할 수 있습니다. scrollTo에 대한 호출을 대기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

시도, 예를 들어,

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); 
    } 
};