2016-08-02 18 views
0

私はC++、Qt 4.8.7、Visual Studio 2013、Windows 7を使用しています。 私のGUIアプリケーションには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

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); 
    } 
}; 
関連する問題