2014-10-02 4 views
4

Я рисую линию с использованием QPainterPath между двумя точек следующим образом:Определить ограничивающий прямоугольник строки в Qt

QPainterPath line; 
line.moveTo(start_p); 
line.lineTo(end_p); 

QPen paintpen(Qt::black); 
paintpen.setWidth(1); 
painter->setRenderHint(QPainter::Antialiasing); 
painter->setBrush(Qt::SolidPattern); 
painter->setPen(paintpen); 
painter->drawPath(line); 

Я определил ограничивающий прямоугольник как:

QRectF Line::boundingRect() const 
{ 
return QRectF(start_p.x(), start_p.y(), end_p.x(), end_p.y()); 
} 

я линия окрашено правильно, когда :

start_p.x() < end_p.x() 

и

start_p.y() < end_p.y() 

Как определить ограничивающий прямоугольник так, чтобы линия была нарисована правильно независимо от взаимосвязи между координатами двух точек (start_p и end_p)?

ответ

6

Вы могли бы попытаться нормализовать прямоугольник:

QRectF Line::boundingRect() const 
{ 
    return QRectF(start_p.x(), start_p.y(), end_p.x(), end_p.y()).normalized(); 
} 
0

Вы можете использовать QPainterPath::boundingRect, который возвращает ограничивающий прямоугольник QPainterPath. Вы можете держать путь художника в качестве члена класса и доступ к нему в boundingRect функции:

QRectF Line::boundingRect() const 
{ 
    return line.boundingRect(); 
} 
2

Вы можете либо: -

  • Проверьте наличие условий, когда концы больше точек начала и правильно установите прямоугольник
  • Верните ограничивающий прямоугольник QPainterPath
  • Используйте вместо QGraphicsLineItem вместо того, чтобы изобретать колесо.

Если вам просто нужна линия, QGraphicsLineItem, скорее всего, лучший способ пойти сюда.

 Смежные вопросы

  • Нет связанных вопросов^_^