QSortFilterProxyModel Index Problem
Verfasst: 15. Februar 2010 14:54
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)
Nach der Einführung vom ProxyModel sieht das ganze so aus:
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
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();
}
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();
}
}
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