Instead of using a for loop in Layer::mouseEvent, use an iterator, this will really speed up the performance as you won't have to keep jumping into the list.
for(QList<Geometry*>::const_iterator iter = geometries.begin(); iter != geometries.end(); ++iter) {
Geometry *geo = *iter;
// rest of code here replacing geometries.at(i) with geo
}
You should also create the QPoint once outside the loop to avoid creating extra objects.
Another optimization would be to pass in the event to geometryClicked, then geometries could note that the click has been handled and future geometries could be skipped.
sorry this took so long to get in!
patched in rev 56 http://sourceforge.net/p/qmapcontrol/code/56