Seite 1 von 1

[Solved]: QGraphicsItem in QTreeWidgetItem speichern/laden?

Verfasst: 26. Dezember 2006 14:13
von toto12
Hallo,

ich möchte über die freien Weihnachtstage meine C++ und Qt Kenntnisse etwas auffrischen. Ich bastele derzeit an einer kleinen Applikation, in der QTreeWidgetItems (QTreeWidget) mit QGraphicsItems (QGraphicsScene, QGraphicsView) verknüpft werden sollen.

Ich dachte ich halte die Sache klein und verzichte auf ein komplexes Model/View Konzept und speichere die Zeiger der Objekte einfach in den jeweiligen data Bereiche ab. Meine Kenntnisse zu QVariant reichen aber wohl nicht aus, um es zu implementieren.

Das speichern geht. Aber wie hole ich den Zeiger wieder aus dem QVariant zurück?

Code: Alles auswählen

void MainWindow::addText()
{
    QGraphicsTextItem *textItem = graphicsScene->addText("QCanvasText");
    textItem->setFlag(QGraphicsItem::ItemIsMovable);
    textItem->setPos(qrand()%int(graphicsScene->width()),qrand()%int(graphicsScene->height()));
    textItem->setZValue(qrand()%256);

	QTreeWidgetItem *treeItem = new QTreeWidgetItem(treeWidget);
	treeItem->setText(0, tr("Added text to scene"));
	treeItem->setData(0, Qt::UserRole, textItem);
	}

void MainWindow::editText()
{
	QTreeWidgetItem *treeItem = treeWidget->currentItem();
	QVariant variant = treeItem->data(0, Qt::UserRole);
	QGraphicsTextItem *textItem = variant.value<QGraphicsTextItem *>();
}
Ist dies überhaupt sinnvoll?

Danke für eine Antwort.
toto12

Verfasst: 26. Dezember 2006 19:56
von upsala
Probiers mal so:

QGraphicsTextItem *textItem = static_cast<QGraphicsTextItem*>(variant.value<void*>());

Verfasst: 26. Dezember 2006 21:50
von toto12
upsala hat geschrieben:Probiers mal so:

QGraphicsTextItem *textItem = static_cast<QGraphicsTextItem*>(variant.value<void*>());
---
Danke für den Tip. Wieder etwas gelernt.

Der Compiler meldet keine Fehler. Jedoch stürzt das Programm zur Laufzeit ab, wenn man auf editText() zugreift. ich denke, die Zeiger ändern sich zur Laufzeit und man bekommt irgendetwas zurück.

Ich werde nun versuchen, über eine gemeinsame ID in beiden data die Brücke zu schlagen. Danke nochmals.

toto12.