在QTableView中恢复垂直滚动

时间:2016-08-02 11:27:22

标签: c++ qt scrollbar qtableview qt4.8

我使用C ++,Qt 4.8.7,Visual Studio 2013,Windows 7。 我的GUI应用程序包含QTableView。我添加了插槽,用于处理模型中的beginResetModel()reset()信号。通常会调用这些插槽,但垂直滚动仍会始终滚动到整个列表的顶部。我该如何解决?我需要恢复当前的位置。请注意,在重置期间不会删除任何行。因此,可以更改旧行内容和/或添加新行。

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

1 个答案:

答案 0 :(得分:0)

尝试将呼叫排队到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);
  }
};