¿Cómo actualizar un QSqlTableModel conservando la selección?

Estoy usando unQSqlTableModel yQTableView para ver una tabla de base de datos SQLite.

Me gustaría que la tabla se actualice automáticamente cada segundo o así (no va a ser una tabla muy grande, un par de cientos de filas). Y puedo hacer esto, como así:

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*
}

Pero esto elimina cualquier selección que tenga, por lo que las selecciones solo duran hasta un segundo. Esto es molesto, ya que otro panel en la GUI depende de lo que se seleccione. Si no se selecciona nada, entonces se restablece a una página de presentación de la explicación.

Luego probé un enfoque un tanto intrépido, que obtiene el número de fila seleccionado, restablece la tabla y luego selecciona esa fila. Pero esto tampoco funciona, ya que la fila seleccionada puede moverse hacia arriba o hacia abajo según las adiciones a la tabla.

Sé que otras clases tienen unadataChanged() Señal, que sería ideal.

Alguno de ustedes sabeCómo podría actualizar la tabla para reflejar los cambios en la base de datos (desde el uso de la línea de comandos u otras instancias del programa)¿Y mantener la selección actual?

Sé que podría obtener datos de la selección actual, y luego, después de restablecer, busque la misma fila y luego vuelva a seleccionarla, pero esto parece una solución contraproducente y mala para el problema.

EDIT: intento actual de solución:

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

Bueno, esto funciona más o menos ahora ...

Respuestas a la pregunta(1)

Su respuesta a la pregunta