Como atualizar um QSqlTableModel enquanto preserva a seleção?

Estou usando umQSqlTableModel eQTableView para ver uma tabela de banco de dados SQLite.

Eu gostaria de ter a atualização automática da tabela a cada segundo (não será uma tabela muito grande - algumas centenas de linhas). E eu posso fazer isso - assim:

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

Mas isso remove qualquer seleção que eu tenha, então as seleções duram apenas até um segundo. Isso é chato, já que outro painel na GUI depende do que está selecionado. Se nada for selecionado, ele será redefinido para uma página inicial de explicação.

Em seguida, tentei uma abordagem um pouco hacky, que obtém o número da linha selecionada, redefine a tabela e, em seguida, seleciona essa linha. Mas isso também não funciona, pois a linha selecionada pode se mover para cima ou para baixo com base nas adições à tabela.

Eu sei que outras classes têmdataChanged() sinal, o que seria ideal.

algum de voces sabecomo eu poderia ter a atualização da tabela para refletir as alterações no banco de dados (a partir de qualquer uso de linha de comando ou outras instâncias do programa)E manter a seleção atual?

Eu sei que eu poderia obter dados da seleção atual e, em seguida, após a pesquisa de redefinição para a mesma linha e, em seguida, selecioná-lo novamente, mas isso parece ser uma solução contra produtiva e ruim para o problema.

EDIT: tentativa atual de solução:

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

Ok, isso mais ou menos funciona agora ...

questionAnswers(1)

yourAnswerToTheQuestion