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

Alles zum Qt Framework für Java
Antworten
Orzl
Beiträge: 2
Registriert: 11. August 2008 14:24

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

Beitrag 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?
ArneStocker
Beiträge: 300
Registriert: 3. November 2004 16:15
Wohnort: Berlin

Beitrag 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
Orzl
Beiträge: 2
Registriert: 11. August 2008 14:24

Beitrag 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?
Antworten