Seite 1 von 1

QSortFilterProxyModel Index Problem

Verfasst: 15. Februar 2010 14:54
von jerry42
Hallo zusammen,

ich arbeite zur Zeit an einer Art Front-End für eine MySQL Datenbank.
Ich habe nun eine QTableView als View und ein QSqlRelationalTableModel als Model. Funktioniert soweit alles prima.
Nun habe ich in meiner Datenbanktabelle einen Eintrag den ich für die View ausblenden will. Also habe ich meine eigene QSortFilterProxyModel-Klasse geschrieben. Das Ausblenden funktioniert auch.
Allerdings bekomme ich nun Probleme beim Hinzufügen von neuen Einträgen in die TableView.
Bisher (vor QSortFiltProxyModel) sah das Ganze so aus (Neue Einträge wurden immer oben eingefügt (nach primary key sortiert, je höher desto weiter oben)

Code: Alles auswählen

void MainWindow::insertEntry() {
    int row = model->rowCount();
    model->insertRow(row);
    if(row==0) row=1;
    
    model->setData(model->index(row-1, 1),DUMMY_ENTRY);
    model->setData(model->index(row-1, 2),DUMMY_ENTRY);
    model->setData(model->index(row-1, 3),DUMMY_ENTRY);
    QModelIndex index = model->index(row-1, 1);
    ui.tableview->setCurrentIndex(index);
    ui.tableview->edit(index);
    model->submitAll();
}
Nach der Einführung vom ProxyModel sieht das ganze so aus:

Code: Alles auswählen

void MainWindow::insertEntry() {
        int row = proxymodel->rowCount();
        if(proxymodel->insertRow(row)){
            if(row==0) row=1;
            proxymodel->setData(proxymodel->index(row-1, 1),DUMMY_ENTRY);
            proxymodel->setData(proxymodel->index(row-1, 2),DUMMY_ENTRY);
            QModelIndex index = proxymodel->index(row-1, 1);
            ui.tableview->setCurrentIndex(index);
            ui.tableview->edit(index);
            model->submitAll();
        }
    }
Doch nun wird zwar oben auch ein neuer Eintrag hinzufügt, doch der bisher obere bzw. der als letzte selektierte, wird überschrieben mit den default werten.

Vielleicht kann mir einer erklären, ob ich einen Fehler beim Index mache. Auch mir selbst kommt das row-1 etwas komisch vor, aber das war notwendig für die korrekte Funktionsweise ohne Proxy notwendig. Doch nun mit Proxy komm ich irgendwie nicht mehr klar. Weder mit noch ohne "-1" funktioniert es korrekt.

Wäre für jeden Tipp dankbar.

Viele Grüße
jerry42

Verfasst: 15. Februar 2010 17:02
von jerry42
ich muss mich leider korrigieren, so wie es aussieht ist doch nicht das QSortFilterProxyModel allein schuld.
Das Einfügen mit reinem QSqlRelationalTableModel hat wohl auch schon einen Knacks weg.

Vielleicht kann mich hier einer auf den üblichen Weg für das Hinzufügen von Einträgen hinweisen. Irgendwas scheint an meinem Code bzw. Vorgehen falsch zu sein.

Dankeschön

jerry42

Verfasst: 20. Februar 2010 22:46
von gon
Hallo

was spricht dagegen, die Einträge unten einzufügen und dann anschließend für die Darstellung umsortieren?

Achim

Verfasst: 22. Februar 2010 16:14
von jerry42
Hallo,
danke für deine Antwort.

Prinzipiell spricht nichts dagegen (so mache ich es jetzt gerade auch). Doch ein Einfügen in der Mitte (z.B. beim aktuell selektierten), wäre für den Benutzer sicher auch wünschenswert. Seitdem ich von QSqlRelationalTableModel zu QSqlTableModel gewechselt bin, treten die index-Probleme allerdings auch nicht mehr auf. Sobald ich mit setRelation eine Relation eingefügt hatte, geriet irgendwie alles aus den Fugen, und nicht nur in dem Model mit der Relation, sondern auch bei anderen (zumindest gefühlt war es so).
Mit der Nutzung von QSqlTableModel hab ich das Problem erstmal umgangen.

Gruß
jerry42