speichern einer Adresse in einen QMimeData

Alles rund um die Programmierung mit Qt
Antworten
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

speichern einer Adresse in einen QMimeData

Beitrag von slash-ex »

Ich habe zwei Probleme. Mein Vorhaben war, dass ich in ein QListWidgetItem mit setData die Adresse einer Klasse ablege und sie dann später über Drag and Drops übergebe. Leider funktioniert das beides nicht, weil QVariant und DataStream das verhindern.

Code: Alles auswählen

		pieceItem->setData(1, army->units.at(i));
Das startDrag scheint sogar noch zu funktionieren... Bis auf dass ich nicht von QVariant zu Unit* zurückcasten kann, ich frage mich als als was wohl die Adresse gespeichert wurde und ob ??!

Code: Alles auswählen

void ListWidget::startDrag(Qt::DropActions /*supportedActions*/)
{
	QListWidgetItem *item = currentItem();

	QByteArray itemData;
	QDataStream dataStream(&itemData, QIODevice::WriteOnly);

	QPoint location = item->data(Qt::UserRole+1).toPoint();

	dataStream << item->data(1) << location;
und zu guter Letzt:

Code: Alles auswählen

void ListWidget::dropEvent(QDropEvent *event)
{
	std::cout<<"dropEvent"<<std::endl;
	if (event->mimeData()->hasFormat("unit_list/unit") ) {
		QByteArray pieceData = event->mimeData()->data("unit_list/unit" );
		QDataStream dataStream(&pieceData, QIODevice::ReadOnly);

		Unit *unit_adr;
		QPoint location;
// 		dataStream >> unit_adr >> location;
Ich weis im Moment leider nicht, wie ich die Adresse über ein Drag and Drop an ein anderes Widget übergebn könnte. Außerdem denke ich, dass das wohl auch nicht Sinn und Zweck ist, aber wie könnte man sowas noch regeln? Danke im Voraus. :wink:
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

Das ist echt übel, das QVariant kann anscheinend echt nicht casten. Es muss doch eine Möglichkeit geben eine simple Klassenadresse irgendwo zu speichern!!!
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Ein Pointer passt immer in ein qulonglong. Also über diesen Weg gehen.
Allerdings rate ich davon ab irgendwelche Pointer durch die Gegend zu schaufeln. Ob die irgendwo noch gültig sind ist nicht klar. Außerdem kann eine andere Applikation eh nicht darauf zugreifen - also wäre dnd nur innerhalb der Applikation möglich.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
slash-ex
Beiträge: 239
Registriert: 30. März 2005 21:40

Beitrag von slash-ex »

danke, dein tip funktioniert wunderbar. ich mache das alles in meiner application, und ich bin mir darüber bewusst, dass man auf sowas normal verzichtet, aber in dem fall ist das die absolut sauberste und einfachste methode.
Antworten