По поводу дерганья размера при изменении верхней границы
Подправил код
if (m_resizeDirectionFlags & ResizeLeft) {
if ((event->scenePos().x()) <= (mapToScene(0, 0).x() + (width() - Const::MINIMUM_ITEM_WIDTH)) &&
(width() + (event->lastScenePos().x() - event->scenePos().x()) > Const::MINIMUM_ITEM_WIDTH)
) {
qreal posRightCorner = mapToScene(0, 0).x() + width();
qreal posLeftCorner = div(mapToParent(event->pos()).x(), vStep).quot * vStep;
if (posLeftCorner < 0 )
posLeftCorner = 0;
setItemPos(posLeftCorner, y());
setWidth(div(posRightCorner - mapToScene(0, 0).x(), vStep).quot * vStep);
}
}
if (m_resizeDirectionFlags & ResizeRight) {
if ((event->scenePos().x() >= (mapToScene(0, 0).x() + Const::MINIMUM_ITEM_WIDTH)) ||
(event->scenePos().x() >= (mapToScene(0, 0).x() + width()))) {
setWidth(div(event->scenePos().x() - mapToScene(0, 0).x(), vStep).quot * vStep);
}
}
if (m_resizeDirectionFlags & ResizeBottom) {
if ((event->scenePos().y() > (mapToScene(0, 0).y() + height())) ||
(event->scenePos().y() > (mapToScene(0, 0).y() + Const::MINIMUM_ITEM_HEIGHT))
) {
setHeight(div(event->scenePos().y() - mapToScene(0, 0).y(), hStep).quot * hStep);
}
}
if (m_resizeDirectionFlags & ResizeTop) {
if ((event->scenePos().y()) <= (mapToScene(0, 0).y() + (height() - Const::MINIMUM_ITEM_HEIGHT)) &&
(height() + (event->lastScenePos().y() - event->scenePos().y()) > Const::MINIMUM_ITEM_HEIGHT)
) {
qreal posBottomCorner = mapToScene(0, 0).y() + height();
qreal posTopCorner = div(mapToParent(event->pos()).y(), hStep).quot * hStep;
if (posTopCorner < 0 )
posTopCorner = 0;
setItemPos(x(), posTopCorner);
setHeight(div(posBottomCorner - mapToScene(0, 0).y(), hStep).quot * hStep);
}
}
Теперь вроде все работает и еще сделал проверку на выход за границы (верхнюю и левую), чтобы объекты не утекали за верхний край.
Может быть сделать такую же проверки и для остальных границ?
И еще я не силен в аглицком хочу спросить
posBottomConner это описка? Может нужно posBottomCorner
И еще по коду
Почему при работе с вертикальными размерами используется шаг сетки hStep?
По логике должно быть vStep и соответственно по горизонтали
Забыл написать. Это я правил в 1.4