Treeview

Alles rund um die Programmierung mit Qt
Antworten
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Treeview

Beitrag von DBGTMaster »

Hallo,

http://doc.qt.nokia.com/4.6/itemviews-s ... model.html

bin seit einiger Zeit dabei, das Simple QT Tree Beispiel zu verstehen, und stoße dabei auf folgendes:

Code: Alles auswählen

int TreeModel::rowCount(const QModelIndex &parent) const
{
    TreeItem *parentItem;
    if (parent.column() > 0)
        return 0;

    if (!parent.isValid())
        parentItem = rootItem;
    else
        parentItem = static_cast<TreeItem*>(parent.internalPointer());


    return parentItem->childCount();
}
Meine Frage ist, was genau hat die Abfrage "parent.column() > 0) zu bedeuten?? Wann ist der Wert eigentlich Größer als "0"??
In diesem Beispiel wird ein Treeview verwendet, welches 2 Spalten hat, warum ist dieser Wert immer 0???

Danke!

// Edit: weitere Frage noch:

Code: Alles auswählen

int TreeModel::columnCount(const QModelIndex &parent) const
{
    if (parent.isValid()) {
        return static_cast<TreeItem*>(parent.internalPointer())->columnCount();
    }
    else
    {
        return rootItem->columnCount();
    }
}
Man könnte hier doch immer "rootItem->columnCount()" zurückgeben, oder wie kann ein View einmal mehr Spalten und einmal weniger haben??
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Treeview

Beitrag von Christian81 »

Ein rowCount() mit einem QModelIndex() dessen row() == 1 ist ist doch möglich - zweite Spalte. Dort gibt es nie children (würde ja blöd aussehen) deshalb muss 0 zurückgegeben werden.
Zur zweiten Frage - im Beispiel zwar nicht aber im Grunde könnte es sein dass eine Zeile mehr Spalten hat als eine andere.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: Treeview

Beitrag von DBGTMaster »

Hallo,

danke, deine Antwort hat sehr geholfen :-)...

Eine Frage noch, gleiches Beispiel:

Code: Alles auswählen

//! [8]
int TreeItem::row() const
{
    if (parentItem)
        return parentItem->childItems.indexOf(const_cast<TreeItem*>(this));

    return 0;
}
//! [8]
Warum hier die Überprüfung, ob ein parentItem existiert, es muss ja jeder Child einen Parent haben oder?? Seh ich da was falsch??

Oder dienst diese Überprüfung rein dafür, um bei Programmierfehler einen Programmabsturz zu vermeiden??

danke!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Treeview

Beitrag von Christian81 »

Siehe ctor vom TreeModel - dort wird ein solches TreeItem erstellt.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
DBGTMaster
Beiträge: 190
Registriert: 19. August 2010 10:00

Re: Treeview

Beitrag von DBGTMaster »

Hallo,

eine weitere Frage, kann ich in einem TreeModel über die data() Methode auch eine Grafik anstatt eines Textes zurückgeben??

Code: Alles auswählen

QVariant BackupMonItem::data(int column) const {
...
...
return QVariant( QImage("C:\red.bmp") );
...
}
Problem ist, dass gar nichts angezeigt wird :-( ...
Und wie kann ich eigentlich andere Elemente wie eine Checkbox oder ähnliches darstellen??

danke!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: Treeview

Beitrag von Christian81 »

MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten