Seite 1 von 1

[geloest] QTreeWidgetItem und das Flag Qt::ItemIsEditable

Verfasst: 26. April 2007 16:22
von buggybear
Hi,

ich habe hier wiedermal ein kleines Problem. :) Ich habe hier ein QTreewidget mit 2 Spalten, welches mittels QTreeWidgetItem mit items gefüllt wird. Jetzt möchte ich allerdings pro Spalte die Editierbarkeit der einzelnen Items festlegen. Spalte 0 soll nicht editierbar sein Spalte 1 dagegen schon. Aktuell habe ich ein normales Flag pro item auf Qt::ItemIsEditable gesetzt. Dadurch sind aber alle Spalten editierbar. Gibt es eine Möglichkeit das für jede einzelne Spalte unabhängig einzustellen?

Verfasst: 26. April 2007 16:48
von upsala
Entweder QTreeWidgetItem überladen und das Flag entsprechend zurückgeben. Oder QTreeView und QStandardItemModel verwenden, oder gleich ein eigenes Model schreiben (bei verwendung von Bäumen leider keine leichte Sache...)

Verfasst: 26. April 2007 16:55
von buggybear
upsala hat geschrieben:Entweder QTreeWidgetItem überladen und das Flag entsprechend zurückgeben.
Kannst Du das evtl. ein bisschen präzisieren? Evtl. mitm Beispiel? Bin leider noch Anfänger :(

Verfasst: 26. April 2007 17:03
von upsala
Sorry, hab gerade gesehen, daß QTreeWidgetItem::flags() nicht virtuell ist (und auch keine Spalte angibt). Somit fällt diese Möglichkeit leider weg.

Verfasst: 26. April 2007 17:29
von buggybear
Es geht wahrscheinlich viel einfacher... Ich habe einfach mal nen neuen SLOT definiert, der durch das itemDoubleClicked(QTreeWidgetItem *, int) SIGNAL ausgelöst wird. In dem werte ich einfach die Spalten aus und wenn Spalte = 0 setze ich die Flags anders... Das sieht dann so aus:

Code: Alles auswählen

connect(this, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(changeFlagsItemElement(QTreeWidgetItem *, int)));


void Blubb::changeFlagsItemElement(QTreeWidgetItem *item, int column)
{

	if (column == 0)
	{
		item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsEnabled);
		QMessageBox::critical(window(), tr("blah"), tr("Diese Elemente sollen nicht editiert werden!"));
	}
	else
	{
		item->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEditable | Qt::ItemIsDragEnabled | Qt::ItemIsDropEnabled | Qt::ItemIsEnabled);
	}
}
Funktioniert schonmal ganz gut (für alle Childitems).

Verfasst: 15. Juni 2007 09:15
von hilby
hey - hatt das selbe problem ohne lösung
das Beispiel funktioniert super - hat mir echt weitergeholfen !!!

:D