For the events I would install an event filter, possibly on the application object and then in the global filter I would provide the desired functionality based on the class of the widget that the event was meant for.
As for id, you have two choices. Either reuse the "objectName" property and store the id there or use dynamic properties.
So basically you don't need to subclass anything.
Bookmarks