I have run into serious problems when I shadow names of features or properties in Item or derived from Item. It is better to just name it something that cannot clash.
static const QHash<int, QByteArray> roles {
{NameRole, "nameRole"},
{IdRole, "idRole"},
{ChildCountRole, "childCountRole"},
{ActiveRole, "activeRole"},
};
Putting role in the name automatically documents this is coming from the model.
Using simple names that have a chance to clash just opens you up to failing later because something is added to an object later. Analogous to using i, j, and k in every loop. It is a pain to diagnose. It is a bad habit that will cost you time months from now. Text is cheap, descriptive names don't cost you anything, but can cost you hours if you collide with other names. Search and replace is a thing. Autocomplete is a thing. Use them to supplement having to type in long variable names.