2016-08-02 27 views
0

Ich verwende C++, Qt 4.8.7, Visual Studio 2013, Windows 7. Meine GUI-Anwendung enthält QTableView. Ich fügte Schlitze hinzu, die beginResetModel() und reset() Signale von meinem Modell behandeln. Diese Slots werden normalerweise aufgerufen, aber der vertikale Scroll scrollt immer noch zum Anfang der gesamten Liste. Wie kann ich es reparieren? Ich muss die aktuelle Position wiederherstellen. Beachten Sie, dass beim Zurücksetzen keine Zeile gelöscht wird. So kann der alte Zeileninhalt geändert und/oder neue Zeilen hinzugefügt werden.Wiederherstellen der vertikalen Bildlauf in QTableView

Antwort

0

Versuchen Sie, den Anruf an scrollTo, z.

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