我使用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);
答案 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);
}
};