Well, I would have also gone for QGraphicsView, but regarding your QtQuick questions:

You can use QMainWindow easily with QtQuick1, since a QDeclarativeView is a QWidget and can therefore be used as the main window's central widget.

If you want to go with QtQuick2, then you can still do that by using QWidget::createWindowContainer() to wrap the QQuickView in a widget.

In either case you can, and in fact should, do all logic in C++. Either by exposing C++ API using the QML engine's root context (set objects as context properties) or my making a type of your own instantiable from QML.

Cheers,
_