1 : do not need to be an QObject
2 : refine codes
forbid copy