[Solved]: QGraphicsItem in QTreeWidgetItem speichern/laden?

Alles rund um die Programmierung mit Qt
Antworten
toto12
Beiträge: 8
Registriert: 26. Dezember 2006 13:40

[Solved]: QGraphicsItem in QTreeWidgetItem speichern/laden?

Beitrag 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
Zuletzt geändert von toto12 am 29. Dezember 2006 23:05, insgesamt 2-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Probiers mal so:

QGraphicsTextItem *textItem = static_cast<QGraphicsTextItem*>(variant.value<void*>());
toto12
Beiträge: 8
Registriert: 26. Dezember 2006 13:40

Beitrag 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.
Antworten