@wangfys
I got exactly the same behavior as you. Although I never used the scene graph before, your example (+ the doc and the Custom Geometry example in Qt's examples) gave me a little crash course in the topic.
http://doc.qt.io/qt-5/qtquick-visualcanvas-scenegraph.html
Your example really should work as it seems you did everything as required by the doc. At my side, the lines become visible once I hover the mouse one the exit button. Possibly this is a bug?
PS. Again, not being useful, I maybe I could suggest you to change the definition of your points from QVariantList points; to QVector<QPointF> points;
Then you can use:
const float x = static_cast<float>(points[i].x());
const float y = static_cast<float>(points[i].y());
vertices[i].set(x, y);
rather than
vertices[i].set(points[i].toPointF().x(), points[i].toPointF().y());
as it saves you a couple of calls to toPointF().