Ich habe mir zum besseren Verständnis von Qt und der Model-View Architektur ein kleines Wörterbuchprogramm geschrieben das bis auf eine Kleinigkeit auch funktioniert:
Also ich habe ein Model das mir eine Tabelle mit folgendem Format zurückliefert:
deutsch, englisch, französisch, spanisch
Das Anzeigen, Ändern und Einfügen direkt am Modell funktioniert einwandfrei.
Das Programm soll folgende Sichten ermöglichen:
deutsch->englisch
deutsch->französisch
deutsch->spanisch
englisch->deutsch
französisch->deutsch
spanisch->deutsch
Um die verschiedenen Sichten zu filtern habe ich QSOrtFilterProxyModel abgeleitet.
Um die jerweils anderen Sprachen auszublenden habe ich filterAcceptsColumn() überschrieben - wass auch funktioniert
Jetzt muss ich nurnoch je nach Sprachkombination die Spalten tauschen,
was ich über mapFromSource() und mapToSource() machen wollte.
Leider bekomme ich dann in der View nichts mehr angezeigt, außer die Spalten werden nicht neu gemapt.
Der Code sieht wie folgt aus:
Code: Alles auswählen
QModelIndex dictFilterSortProxy::mapFromSource(const QModelIndex& sourceIndex)const{
QModelIndex indexA=sourceIndex;
// if(langComb==deEng || langComb==deFr || langComb==deSpan)
// return sourceIndex;
if(langComb==engDe){
if(sourceIndex.column()==0)
indexA= index(sourceIndex.row(), 1);
else if(sourceIndex.column()==1)
indexA= index(sourceIndex.row(), 0);
}
else if(langComb==frDe){
if(sourceIndex.column()==0)
indexA= index(sourceIndex.row(), 2);
else if(sourceIndex.column()==2)
indexA= index(sourceIndex.row(), 0);
}
else if(langComb==spanDe){
if(sourceIndex.column()==0)
indexA= index(sourceIndex.row(), 3);
else if(sourceIndex.column()==3)
indexA= index(sourceIndex.row(), 0);
}
return indexA;
}
QModelIndex dictFilterSortProxy::mapToSource ( const QModelIndex & proxyIndex ) const{
QModelIndex indexA=proxyIndex;
// if(langComb==deEng || langComb==deFr || langComb==deSpan)
// return proxyIndex;
else if(langComb==engDe){
if(proxyIndex.column()==0)
indexA= index(proxyIndex.row(), 1);
else if(proxyIndex.column()==1)
indexA= index(proxyIndex.row(), 0);
}
else if(langComb==frDe){
if(proxyIndex.column()==0)
indexA= index(proxyIndex.row(), 2);
else if(proxyIndex.column()==2)
indexA= index(proxyIndex.row(), 0);
}
else if(langComb==spanDe){
if(proxyIndex.column()==0)
indexA= index(proxyIndex.row(), 3);
else if(proxyIndex.column()==3)
indexA= index(proxyIndex.row(), 0);
}
return indexA;
}