void MainScene::dragMoveEvent(QGraphicsSceneDragDropEvent *event){ QGraphicsView * gw = views().at(0); // с этой сценой всегда связан только один QGraphicsView int xpos = event->scenePos().x(), ypos = event->scenePos().y(); // потеряли дробную часть нафик, не нужна она int leftX = xpos / gridX, // int gridX и gridY хранят шаг сетки по горизонтали и по вертикали leftY = ypos / gridY; // leftX, leftY - НОМЕРА (а не координаты) узлов сетки слева и сверху от курсора if( xpos % gridX > gridX / 2 ) // не существенно, что средняя точка между узлами теряется, всё равно это мышь рукой возят leftX++; // если остаток от деления больше половины шага сетки, то ближе правый узел, иначе левый if( ypos % gridY > gridY / 2 ) leftY++; // номер узла * шаг сетки == координата узла на сцене QCursor::setPos( gw->mapToGlobal(gw->mapFromScene( leftX * gridX, leftY * gridY )) );}