Seite 1 von 1

Treeview

Verfasst: 17. Juli 2011 19:42
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??

Re: Treeview

Verfasst: 17. Juli 2011 20:25
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.

Re: Treeview

Verfasst: 17. Juli 2011 23:03
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!

Re: Treeview

Verfasst: 18. Juli 2011 06:33
von Christian81
Siehe ctor vom TreeModel - dort wird ein solches TreeItem erstellt.

Re: Treeview

Verfasst: 18. Juli 2011 20:37
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!

Re: Treeview

Verfasst: 18. Juli 2011 20:47
von Christian81