void QDeclarativeGraphicsGeoMap::hoverMoveEvent(QGraphicsSceneHoverEvent *event) { if (!mapData_) return; QList<QGeoMapObject*> objectsThen = mapData_->mapObjectsAtScreenPosition(event->lastPos()); QList<QGeoMapObject*> objectsNow = mapData_->mapObjectsAtScreenPosition(event->pos()); QSet<QGeoMapObject*> enter = objectsNow.toSet(); enter -= objectsThen.toSet(); for (int i = 0; i < objectsNow.size(); ++i) { if (!enter.contains(objectsNow.at(i))) continue; QDeclarativeGeoMapObject* mapObject = objectMap_.value(objectsNow.at(i), 0); if (mapObject) mapObject->enterEvent(); } QSet<QGeoMapObject*> exit = objectsThen.toSet(); exit -= objectsNow.toSet(); for (int i = 0; i < objectsThen.size(); ++i) { if (!exit.contains(objectsThen.at(i))) continue; QDeclarativeGeoMapObject* mapObject = objectMap_.value(objectsThen.at(i), 0); if (mapObject) mapObject->exitEvent(); } QSet<QGeoMapObject*> move = objectsNow.toSet(); move += objectsThen.toSet(); QList<QGeoMapObject*> objects = mapData_->mapObjectsInViewport(); QDeclarativeGeoMapMouseEvent *mouseEvent = createMapMouseEvent(event); for (int i = 0; i < objects.size(); ++i) { if (!move.contains(objects.at(i))) continue; QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0); if (mapObject) mapObject->moveEvent(mouseEvent); } /* QList<QGeoMapObject*> objects = mapData_->mapObjectsAtScreenPosition(event->pos()); for (int i = objects.size() - 1; i >= 0; --i) { QDeclarativeGeoMapObject* mapObject = objectMap_.value(objects.at(i), 0); if (mapObject) mapObject->moveEvent(mouseEvent); } */ for (int i = 0; i < mouseAreas_.size(); ++i) mouseAreas_.at(i)->moveEvent(mouseEvent); delete mouseEvent; }