Seite 1 von 1

[gelöst] Wie funktioniert QTreeModel.setHeaderData() ?

Verfasst: 11. August 2008 15:03
von Orzl
Hallo zusammen,

ich habe mir mein eigenes QTreeModel geschrieben, dass auch funktioniert. Nun versuche ich, diesem eine Überschrift zu verpassen und zwar folgendermaßen:

Code: Alles auswählen

public class OverviewModel extends QTreeModel {	
	
	public OverviewModel() {
		super();
		
		//does not work.
		if(!setHeaderData(0, Qt.Orientation.Horizontal,tr("bla"))) System.out.println("setHeaderData failed");
		
		//does not work
		if(!setHeaderData(0, Qt.Orientation.Horizontal,new Integer(3))) System.out.println("setHeaderData failed");
		
		//does not work
		Object header = headerData(0,Qt.Orientation.Horizontal);
		if(!setHeaderData(0, Qt.Orientation.Horizontal,header)) System.out.println("setHeaderData failed");
	
	}
...
setHeaderData() gibt in allen Fällen false zurück.

Laut einiger Beispiele die ich gefunden habe, sollte die erste Methode zumindest bei einem QAbstractItemModel funktionieren. Da ein QTreeModel auch ein QAbstractItemModel ist, sollte es also so gehen. Was mache ich falsch?

Verfasst: 12. August 2008 07:54
von ArneStocker
Die Info steckt in der vom Model abgeleiteten Methode

Code: Alles auswählen

    public Object headerData(int section, Qt.Orientation orientation, int role) {
        // vertikaler Header
        if (orientation == Qt.Orientation.Vertical) && (section < this.rowCount()){
            return "Name für Zeile Nr. section";
        }
        // horizontaler Header
        if ( (role == Qt.ItemDataRole.DisplayRole) && (section < this.columnCount()) ) {
        	return "Name für Spalte Nr: section"
        }
        return null;
    }
Gruß Arne

Verfasst: 12. August 2008 13:58
von Orzl
Ok danke, ich hab es jetzt hin gekriegt in dem ich die Methode headerData() in meiner Klasse überschrieben habe.

Code: Alles auswählen

@Override
	public Object headerData(int section,Qt.Orientation orientation, int role) {
	
		if (section==0 && orientation == Qt.Orientation.Horizontal && role==Qt.ItemDataRole.DisplayRole){
            return "erste Spalte";
        } 
		
		return super.headerData(section, orientation, role);
	}
Trotzdem verstehe ich nicht, warum ich nicht setHeaderData() benutzen kann. Oder ist es so gedacht, dass man diese Methode auch selber implementieren muss?