15
					
						
						« on: August 24, 2016, 01:04:22 pm »
					 
					
					По поводу дерганья размера при изменении верхней границы
Подправил код
    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