gpt4 book ai didi

c++ - 使用 QPainterPath 创建一个凹矩形

转载 作者:行者123 更新时间:2023-11-30 04:18:11 25 4
gpt4 key购买 nike

我想在 Qt 中创建这样的形状:

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);

代码创建了顶部和底部的弯曲,但我无法创建左侧和右侧的弯曲。还有另一种方法吗?我看到了 Clipping,但不确定它是否有效。

最佳答案

这是一个近似值

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

也许缩放凸矩形可以获得更好的结果,而不是重新定义它。

关于c++ - 使用 QPainterPath 创建一个凹矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16609330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com