На окошке рисуется прямоугольник, который можно перемещать мышкой.
Перемещение может быть: свободным и с привязкой к сетке
Вот с привязкой к сетке у меня фигня выходит -- прямоугольник прикрепляется, но после начала движения прямоугольник тянется не за ту точку, в которую мы тыкнули на нем, а примерно верхний левый угол. Это особенно заметно, когда за нижний правый угол его хватает, перемещаешь, и он притягивается к курсору в верхнему правому углу, а после привязывается к ближайшей стороне ячейки сетки
Как сделать, чтобы работало хорошо?
При свободном перемещении такого нету
Алгоритм перемещения прямоугольника по форме:
C++ (Qt)
void mouseMoveEvent(QMouseEvent * e) {
if (press) {
QPointF delta = e->posF() - lastPos;
rect.moveTo(rect.topLeft() + delta);
// Если включена привязка
if (snap.isChecked()) {
QPointF pos = e->posF();
double x = pos.x();
double y = pos.y();
x -= int(x) % cellSize.width();
y -= int(y) % cellSize.height();
pos = QPointF(x, y);
rect.moveTo(pos);
pos -= QPointF(x, y) - rect.topLeft();
rect.moveTo(pos);
}
}
lastPos = e->posF();
update();
}
Минимально-компилябельный пример приложен