QSortFilterProxyModel Index Problem

Alles rund um die Programmierung mit Qt
Antworten
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

QSortFilterProxyModel Index Problem

Beitrag 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
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

Beitrag 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
gon
Beiträge: 10
Registriert: 29. Januar 2010 20:29
Wohnort: Bremen

Beitrag von gon »

Hallo

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

Achim
Man muß nicht jeden Blödsinn mitmachen, nur weil er neu ist.
jerry42
Beiträge: 126
Registriert: 9. Oktober 2008 10:48

Beitrag 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
Antworten