Major refactor: use QGraphicsScene, QThread, QNetworkAccessManager