2013-05-17 53 views
1

凹形矩形我想在Qt来创建这样的形状:创建使用QPainterPath

enter image description here

这里是一块代码(基本上绘制一个矩形,并在其上绘制了一个弧)的:

QPainterPath groupPath; 
QPen pen; 

pen.setCosmetic(true); 

groupPath.moveTo(60.0, 40.0); 
groupPath.arcTo(40.0, 35.0, 40.0, 10.0, 180.0, 180.0); 
groupPath.moveTo(40.0, 40.0); 
groupPath.lineTo(40.0, 80.0); 
groupPath.arcTo(40.0, 75.0, 40.0, 10.0, 0.0, 180.0); 
groupPath.arcTo(40.0, 75.0, 40.0, 10.0, 0.0, 180.0); 
groupPath.lineTo(80.0, 80.0); 
groupPath.lineTo(80.0, 40.0); 
groupPath.closeSubpath(); 
//setFixedSize(135, 80); 
QPainter painter(this); 
painter.setPen(pen); 
painter.drawPath(groupPath); 

该代码创建顶部和底部弯曲,但我无法创建左侧和右侧弯曲。有没有另一种方法来做到这一点?我看到剪辑,但不知道它是否会起作用。

回答

2

这里是一个近似值

auto convexRect = [](QPainterPath& pp, QRect r) { 

    const int K = 20; 
    QPoint 
     tl = r.topLeft(), tr = r.topRight(), bl = r.bottomLeft(), br = r.bottomRight(), 
     dy(0, K), dx(K, 0); 

    pp.moveTo(tl); 
    pp.cubicTo(tl + dy, tr + dy, tr); 
    pp.cubicTo(tr - dx, br - dx, br); 
    pp.cubicTo(br - dy, bl - dy, bl); 
    pp.cubicTo(bl + dx, tl + dx, tl); 
}; 

QPainterPath pp; 
QRect r(0, 0, 200, 600); 
convexRect(pp, r); 
convexRect(pp, r.adjusted(20, 20, -20, -20)); 

产生

enter image description here

也许你能得到更好的结果缩放凸矩形,而不是重新定义它。

+0

非常感谢这帮了我:) – www