Seite 1 von 1

kleiner grafikfehler bei graphic-items

Verfasst: 6. Januar 2008 01:06
von slash-ex
also wenn ich nach einem doppelklick ein graphic-item auswähle, dann möchte ich es an ein qdrag übergeben, das klappt auch alles. dann wird das aktuelle item vom feld gelöscht und die daten an ein neues übergeben. das klappt auch einwandfrei. aber manchmal kommt es vor (scheint zufällig zu passieren) das das pixmap des items noch an der stelle verbleibt. der bereich lässt keine item-typischen funktionen zu weil das item weg ist, aber so eine art geister-abbild scheint dann noch vorhanden. das ding wird durch ein scene-update nicht entfernt. nur ein skalieren des widgets lässt es verschwinden...

fällt jemanden ein woran das liegen könnte?

Code: Alles auswählen

void GraphWidget::mouseDoubleClickEvent(QMouseEvent *event) {
	if (event->button() != Qt::LeftButton)
		return;
	mouseDButn = true;

	double mx = event->x()/pixels_per_inch;
	double my = event->y()/pixels_per_inch;

...

	QPointF mouseDCDown = event->pos();
	for(int i = 0; i < area.size() && mouseLButn; i++) {
		double width = area.at(i)->getSize().width();
		double height = area.at(i)->getSize().height();

		double px = area.at(i)->getPos().x();
		double py = area.at(i)->getPos().y();

		if(mouseDCDown.x() <= px + width && mouseDCDown.x() >= px && 
		   mouseDCDown.y() <= py + height && mouseDCDown.y() >= py) {

			QByteArray itemData;
			QDataStream dataStream(&itemData, QIODevice::WriteOnly);
			QMimeData *mimeData = new QMimeData;

			//! bef�llen
			dataStream << area.at(i)->getPixm() << mouseLDown << area.at(i)->getAngle() << area.at(i)->getScaleF();
			mimeData->setData("image/terrain-piece", itemData);

			//! es fehlt eine möglichkeit das pixmap gedreht an das dropevent zu übergeben, evtl. ==> transformed()
			QDrag *drag = new QDrag(this);
			drag->setMimeData(mimeData);
			drag->setHotSpot(QPoint(width/2, height/2) );
			drag->setPixmap(area.at(i)->getPixm().scaled(width, height) );

			//!hier wird das bild dann an die mouse gehangen, bzw. das eigentliche dragging gestartet
			if(drag->exec(Qt::MoveAction) == Qt::MoveAction) {
				scene->removeItem(area.at(i) );
				area.removeAt(i);

				scene->update();
			}
		}
	}

	scene->update();
	QGraphicsView::mouseDoubleClickEvent(event);
}

Verfasst: 6. Januar 2008 09:16
von upsala
Berechnest du die Abmessungen deines Items selbst? Wenn ja, ist diese Berechnung event. falsch.