2014-09-29 3 views
1

У меня есть QGraphicsSvgItem на QGraphicsScene размером 48x48. Я хочу установить его центр на x = 50 и y = 50 QGraphicsScene (По умолчанию QGraphicsScene позиционирует верхний левый угол элемента svg). Я унаследовал QGraphicsSvgItem и повторно выполнил его функцию рисования, а затем применил операцию перевода в x = -24 y = -24, но затем он отображает 1/4 правую нижнюю форму элемента svg.позиционирование центра QGraphicsSvgItem в позиции.

поэтому, пожалуйста, предложить, как совместите центр svgitem при х = 50, у = 50

ответ

1

QGraphicsItem имеет свою локальную верхнюю левую в точке (0,0) по умолчанию. Однако, если вы наследуете QGraphicsItem, вы можете изменить его, так что (0,0) является центром элемента.

Эта функция обрабатывается функцией boundingRect(). Если у вас есть элемент с высотой и шириной 50, ограничивающий прямоугольник по умолчанию будет возвращать (0,0,50,50) для (x, y, w, h).

Чтобы локальный центр (0,0) отменил функцию boundingRect для возврата (-25, -25, 50, 50).

QRectF boundingRect() const 
{ 
    return QRectF(-25, -25, 50, 50); 
} 

Затем центрировать элемент в сцене в (50,50), вам просто нужно установить положение элемента в этой координате

item->setPos(50, 50); 
0

нужно переопределять метод рисования в QGraphicsSvgItem также

QRectF boundingRect() const 
{ 
     return QRectF(-24,-24,48,48); 
} 


void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) 
{ 
    painter->translate(-24,-24); 
    QGraphicsSvgItem::paint(painter,option,widget); 
} 
Смежные вопросы