[Development] Regression / Behavioral Change in QSqlTableModel / QTableView in Qt 5

Maemi Carrer maemicarrer at gmail.com
Tue Aug 14 16:17:56 CEST 2012


Hello!

When porting from Qt4 to Qt5 I've noticed a behavorial change in
QSqlTableModel (I've attached a small example).

Situation: QSqlTableModel set on a QSqlTableView
Action: Delete row using deleteRow()

Qt4 behavior: delete row from model and from table view
Qt5 behaviour: delete row from model, empty row in view (but still
show), vertical header now shows exclamation mark instead of index

Inserations for example using insertRecord() are not reflected as well
(no visible changes in the view, although data is added to the table).

Now the question is: is this a regression from Qt4 or is it intended
behavioral change. If so, how do I restore the known behavior, so that
the view is updated correctly (and automatically)?


br
Maemi


int main(int argc, char *argv[])
{
    QApplication application(argc, argv);

    QSqlDatabase database = QSqlDatabase::addDatabase("QSQLITE");
    database.setDatabaseName(":memory:");
    database.open();
    database.exec("CREATE TABLE Test (fieldA TEXT, fieldB TEXT, fieldC TEXT)");
    database.exec("INSERT INTO Test VALUES ('A1', 'B1', 'C1')");
    database.exec("INSERT INTO Test VALUES ('A2', 'B2', 'C2')");
    database.exec("INSERT INTO Test VALUES ('A3', 'B3', 'C3')");

    QSqlTableModel model;
    model.setEditStrategy(QSqlTableModel::OnFieldChange);
    model.setTable("Test");
    model.select();

    QTableView view;
    view.setModel(&model);
    view.setSelectionBehavior(QAbstractItemView::SelectRows);
    view.setSelectionMode(QAbstractItemView::SingleSelection);
    view.show();

    model.removeRow(1);

    return application.exec();
}



More information about the Development mailing list