2014-10-02 126 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可能是最好的办法。