Seite 1 von 1

Expand bei QTreeWidget

Verfasst: 4. März 2008 07:13
von Qt_Starter
Hallo,

ich nutze als DisplayWidget ein QTreeWidget und habe die Möglichkeit über einen Dialog die Inhalte des TreeWidgets zu manipulieren. Als Model für das QTreeWidget nutze ich das QtreeWidgetItem, indem alle daten „gespeichert“ sind.
Jetzt will ich bei Änderung eines Wertes im Dialog, das genau diese Stelle im Tree aufgeklappt wird.
Laut Doku ist dies mit „expand(...)“ möglich, jedoch habe ich jetzt noch das Problem den QmodelIndex mit dem QTreeWidget zu füllen.

Zur Veranschaulichung (da meine Erklärung vielleicht zu schlecht war):

Dialog:
Seite3, Zeile2 setze Wert: Neu

TreeWidget:

Code: Alles auswählen

-Buch
	+Seite1
	+Seite2
	-Seite3
		+Zeile1
		-Zeile2			Alt
		+Zeile3
	+Seite4
Wie kann ich das machen?

Verfasst: 4. März 2008 09:05
von upsala

Code: Alles auswählen

void QTreeWidget::expandItem(const QTreeWidgetItem *item)
Benötigt keinen QModelIndex...

@upsala

Verfasst: 4. März 2008 10:38
von Qt_Starter
Hab ich auch probiert, aber leider klappt es nicht. Vielleicht hilft ein wenig Code, wobei alle Daten im "p_displayConfigItem stecken:

Code: Alles auswählen

QTreeWidgetItem *updatedSectionItem = new QTreeWidgetItem(0);
QTreeWidgetItem *updatedOptionItem = new QTreeWidgetItem(0);

updatedSectionItem = p_displayConfigItem->takeChild(sectionID);

updatedOptionItem = updatedSectionItem->takeChild(optionID);	

TreeController->expandCurrentItem(updatedOptionItem);
		
updatedOptionItem->setText(1, newContent);
updatedSectionItem->insertChild(optionID, updatedOptionItem);
p_displayConfigItem->insertChild(sectionID, updatedSectionItem);	

TreeController->expandCurrentItem(updatedOptionItem);
wobei ich dann später zunächst alles wieder "einklappe" und danach dann versuche so zu öffnen:

Code: Alles auswählen

void QTreeWidget::collapseAll();
void QTreeWidget::expandItem(updatedOptionItem);

Verfasst: 4. März 2008 10:58
von macman
Was ist denn expandCurrentItem? Eine Methode von QTreeWidget ist es jedenfalls nicht.

Verfasst: 4. März 2008 12:18
von upsala
Vor allem entfernt takeChild das Item, somit kann es auch nicht mehr 'expanded' werden.

Verfasst: 4. März 2008 12:20
von Qt_Starter
Mit expandCurrentItem übergebe ich nur den Pointer an die Klasse TreeController, die dann den eigentlichen Expand durchführt.

Code: Alles auswählen

void TreeController::expandCurrentItem(QTreeWidgetItem *item)
{
void QTreeWidget::collapseAll();
void QTreeWidget::expandItem(item);
}

Verfasst: 4. März 2008 12:48
von Qt_Starter
Vor allem entfernt takeChild das Item, somit kann es auch nicht mehr 'expanded' werden.
Richtig, so steht es in der Doku. Deshalb dachte ich, das ich vielleicht über ein QModelIndex die jeweilige Stelle "expanden" kann. Oder gibt es noch eine andere Möglichkeit für :

Code: Alles auswählen

void QTreeWidget::expandItem(const QTreeWidgetItem *item)
um an das jeweilige Item zu kommen?

Verfasst: 4. März 2008 14:06
von macman
Guck doch mal durch welche Möglichkeiten du bei einem QTreeWidgetItem hast, um an ein ChildItem zu kommen. So viele sind es ja nicht.