Jak odświeżyć QSqlTableModel, zachowując wybór?

UżywamQSqlTableModel iQTableView aby wyświetlić tabelę bazy danych SQLite.

Chciałbym mieć odświeżanie tabeli co sekundę lub mniej (nie będzie to bardzo duży stół - kilkaset wierszy). I mogę to zrobić - tak:

QTimer *updateInterval = new QTimer(this);
updateInterval->setInterval(1000);
updateInterval->start();
connect(updateInterval, SIGNAL(timeout()),this, SLOT(update_table()));

...

void MainWindow::update_table()
{
    model->select(); //QSqlTableModel*
    sqlTable->reset(); //QTableView*
}

Usuwa to jednak wszystkie moje wybory, więc selekcje trwają tylko do sekundy. Jest to denerwujące, ponieważ inne okienko w GUI zależy od tego, co zostało wybrane. Jeśli nic nie jest zaznaczone, resetuje się do strony powitania objaśniającej.

Następnie spróbowałem nieco hackiego podejścia, które pobiera wybrany numer wiersza, resetuje tabelę, a następnie wybiera ten wiersz. Ale to też nie działa, ponieważ wybrany wiersz może przesuwać się w górę lub w dół w oparciu o dodatki do tabeli.

Wiem, że inne klasy majądataChanged() sygnał, który byłby idealny.

Czy ktokolwiek z was wiejak mogłem odświeżyć tabelę, aby odzwierciedlić zmiany w bazie danych (z użycia wiersza poleceń lub innych instancji programu)I zachować bieżący wybór?

Wiem, że mogę uzyskać dane z bieżącej selekcji, a następnie po zresetowaniu wyszukać ten sam wiersz, a następnie ponownie go wybrać, ale wydaje się to być wydajnym i złym rozwiązaniem problemu.

EDYCJA: Bieżąca próba rozwiązania:

void MainWindow::update_table()
{    

    QList<QModelIndex> selection = sqlTable->selectionModel()->selection().indexes();
    QList<int> selectedIDs;
    bool somethingSelected = true;

    for(QList<QModelIndex>::iterator i = selection.begin(); i != selection.end(); ++i){
        int col = i->column();
        QVariant data = i->data(Qt::DisplayRole);

    if(col == 0) {
            selectedIDs.append(data.toInt());
        }
    }

    if(selectedIDs.empty()) somethingSelected = false;

    model->select();
    sqlTable->reset();

    if(somethingSelected){
        QList<int> selectedRows;

        int rows = model->rowCount(QModelIndex());
        for(int i = 0; i < rows; ++i){
            sqlTable->selectRow(i);
            if(selectedIDs.contains(sqlTable->selectionModel()->selection().indexes().first().data(Qt::DisplayRole).toInt())) selectedRows.append(i);
    }

    for(QList<int>::iterator i = selectedRows.begin(); i != selectedRows.end(); ++i){
        sqlTable->selectRow(*i);
    }
}
}

Dobra, to mniej więcej działa teraz ...

questionAnswers(1)

yourAnswerToTheQuestion