QSortFilterProxyModel und Relationale Datenbanken
Verfasst: 17. Juni 2007 19:44
Hi,
Ich stelle Daten aus einer MySQL DB in einer QTableView mittels eines QSqlRelationalTableModel dar. Dies klappt auch wunderbar.
Mit einigen Combos und CheckBoxes würde ich gerne die Ausgabe in der Tabelle filtern.
Nun habe ich zwei Probleme:
1. Problem:
Wie kann ich eine Abfragekombination erstellen?
Wenn ich mit setFilterRegExp() eine Filterung durchführe, werden natürlich die Zustände der anderen Combos ignoriert.
Ich habs auch schon mit PatternSyntax versucht. Damit kann ich zumindest eine Combo und ein Suchfeld einschließen, aber nicht alle 3 Combos.
Vielleicht kann mir ja jemand einen Tipp geben wie ich eine gute Abfrage hinbekomme: if (combo1->currentText() == "Hans" && combo2->currentText() == "2002" .... proxyModel->setFilterRegExp(regExp);
2. Problem:
Ich verwende Relationale DB. Wenn ich nun eine Suche durchführe und den Datensatz bearbeiten möchte löst mir das ProxyModel die Relationen nicht auf. Es stehen zwar die richtigen Einträge in der Tabelle, wenn ich sie jedoch verändern will kann ich nicht mehr aus einer ComboBox die Relations auswählen sondern nur den Text ändern. Wenn ich den Text ändere und speicher verschewindet der ganze Eintrag
st klar, da dann die Relationen nicht mehr passen). Wie kann ich nun in einem QSortFilterProxyModel mit Relationen arbeiten???
Ich dachte es müsste irgendwie mit ModelIndex und mapFromSource gehen... aber da hänge ich total.
[PS.:] Ich hab eine ähnliche Frage beireits im Forum gestellt, bitte köpft mich nicht!
Ich stelle Daten aus einer MySQL DB in einer QTableView mittels eines QSqlRelationalTableModel dar. Dies klappt auch wunderbar.
Mit einigen Combos und CheckBoxes würde ich gerne die Ausgabe in der Tabelle filtern.
Nun habe ich zwei Probleme:
1. Problem:
Wie kann ich eine Abfragekombination erstellen?
Wenn ich mit setFilterRegExp() eine Filterung durchführe, werden natürlich die Zustände der anderen Combos ignoriert.
Code: Alles auswählen
proxyModel->setFilterRegExp(comboBoxEPTerm->currentText() );
Code: Alles auswählen
void tableModel::filterRegExpChanged()
{
QRegExp::PatternSyntax syntax = QRegExp::PatternSyntax(comboBoxEPTerm->itemData(comboBoxEPTerm->currentIndex()).toInt());
Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive;
QRegExp regExp(lineEditSearch->text(),caseSensitivity,syntax);
proxyModel->setFilterRegExp(regExp);
personTableView->setModel(proxyModel);
}
2. Problem:
Ich verwende Relationale DB. Wenn ich nun eine Suche durchführe und den Datensatz bearbeiten möchte löst mir das ProxyModel die Relationen nicht auf. Es stehen zwar die richtigen Einträge in der Tabelle, wenn ich sie jedoch verändern will kann ich nicht mehr aus einer ComboBox die Relations auswählen sondern nur den Text ändern. Wenn ich den Text ändere und speicher verschewindet der ganze Eintrag
Ich dachte es müsste irgendwie mit ModelIndex und mapFromSource gehen... aber da hänge ich total.
[PS.:] Ich hab eine ähnliche Frage beireits im Forum gestellt, bitte köpft mich nicht!