kleiner grafikfehler bei graphic-items
Verfasst: 6. Januar 2008 01:06
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?
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);
}