why does this class need qobject?