Class should be connected by signals/slots not attributes
A lot of classes have other classes as attributes (especially, most classes have an attribute linking the MapModel instance), but do not need it. Classes should be connected using signals/slots as much as possible and avoid pointers to other classes. Also signals/slots should be more documented in the code because right now it is quite hard to follow what happens (especially because both signals/slots and pointers are used).
It would also clean up the number of attributes of each class and hopefully make the code more readable.