You're close, but there are a few errors
One important thing to understand is that there is only ever one instance
of any given PropertyGroup
definition. Your containers do not create them, they simply refer to them. Each container uses the same group information, so there's no need to recreate it for every object.
These groups should be created entirely outside of the data that will be using them (e.g. during your app's initialisation). You'd create any you need (filling them with appropriate PropertyDescriptors), and store them in a PropertyGroupLibrary. The minimum you'd need to do is make a single PropertyGroup defining all the properties of your NomeButton class [but you can of course divide those properties into multiple groups if you want].
You do not call anything in PropertyGroup::ComponentFactory. You just need to make sure that one exists for the PropertyGroupEditor.
Once you have a PropertyGroupLibrary (or other custom-made PropertyGroup::Source) and a PropertyGroup::ComponentFactory, you have all you need to create a PropertyGroupEditor.
Then of course you have your data...
The container has two functions to override:getPropertyGroups(groupIds)
This just needs to add the IDs of supported groups. You don't use any group objects directly here, you're just referring to the instances in your library. So, if you were just using a single group called "NomeButtonProperties", you'd just call groupIds.add("NomeButtonProperties") in here.getGroupProperty(groupId,propInfo)
This part can either be VERY EASY or QUITE FIDDLY, depending on how your data is stored and your familiarity with the Value
All you have to do is look at the group/property parameters, and return a corresponding Value
wrapping the data they describe. If your data is stored in a ValueTree
this is SO EASY. If not, you'll need to create your own Value::ValueSource
subclasses to handle your data. You'll have to look at the docs and juce library code for more info on that, as I can't really cover that here!
If you've not dabbled with such things before (and you're not already using a ValueTree), I would recommend trying out a ValueTree for now.
If you give NomeButton a member ValueTree (let's say it's called "myTreeNode"), you'd just need to change functions like this:
"NomeButton::setNumSpiders(x)" should set a tree property (e.g. myTreeNode.setProperty("numSpiders",x))
"NomeButton::getNumSpiders()" should pull a named value from the tree (e.g. return myTreeNode["numSpiders"]).
Then, for getGroupProperty(groupId,propInfo), if propInfo indicated the number-of-spiders property, you could say return myTreeNode.getPropertyAsValue("numSpiders",NULL);
Once you've tackled those things, you use the editor like this: