PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : QHeader einer KListView



dipesh
18-03-2004, 11:37
Ich hab da eine von KListView abgeleitete Klasse. In dieser wird fleissig addColumn() und anschließendes header()->moveSection() um die col zu positionieren aufgerufen. Nun hab ich feststellen dürfen, dass KListView::saveLayout() auf QHeader::mapToIndex() zugreift um die Spalten zu indixieren. Da dieser Index jedoch auf der Reihenfolge der addColumn()-Aufrufe beruht ist er für mich nicht brauchbar. Noch schlimmer; saveLayout() speichert die Spaltenmerkmale in falscher Reihenfolge ab :-(

Nun, ich hatte versucht eine Klasse von QHeader abzuleiten, hier mapToIndex() zu überschreiben und duch ein Instanziieren mittels new MyExtHeader(MyListView) sei das gegessen. Stattdesen habe ich nun 2 QHeader. Sehe ich das richtig, dass sich ein QHeader von einer QListView/KListView nicht überschreiben/modifizieren lässt? Wenn ja, hat jemand vielleicht eine Idee an welcher Stelle ich da sonst eingreifen könnte ohne saveLayout() und restoreLayout() für die eine ListView neu schreiben zu müssen?! Danke im voraus für jeden Tip!

dipesh
20-03-2004, 16:00
Da ich in zahlreichen Versuchen feststellen durfte, dass es wirklich keinen Weg gibt hier in die Art und Weise wie mapToIndex() arbeitet einzugreifen, hab ich nach langer Zeit doch noch einen funktionieren workaround gefunden. Für den Fall, dass jemand mit einem ähnlichen Problem konfrontiert ist;
Da die Reihenfolge der addColumn()-Aufrufe auch den internen Index bestimmt, hab ich ganz einfach bei einfügen einer neuen Spalte ein addColumn()-Aufruf durchgeführt und anschließend sämtliche Spalten (ab jener Position wo die neue Spalte eingefügt werden sollte) um eine Position nach hinten verschoben (mittels setLabel, setColumnWidth, ... da moveSection ja wieder den internen Index vertauschen würde). Das scheint mir tatsächlich der einzige, auch wenn unschöne, Weg zu sein...