Why don't you subclass QCanvasItem directly and in QCanvasItem::draw() you do all the things you mentioned, like drawing a line, texts, an ellipse, etc...

You could add QPaintePath members to your item to describe the line and ellipse, and paint them in draw( QPainter* ).

Regards.