首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用QPainterPath创建凹矩形

使用QPainterPath创建凹矩形
EN

Stack Overflow用户
提问于 2013-05-17 20:41:39
回答 1查看 740关注 0票数 1

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

下面是这段代码(基本上是画一个矩形,然后在上面画一条弧线):

代码语言:javascript
复制
 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);

代码创建了顶部和底部弯曲,但我无法创建左侧和右侧的弯曲。有没有其他方法可以做到这一点?我看到了剪辑,但不确定它是否会工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-18 02:19:52

这是一个近似值

代码语言:javascript
复制
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));

收益率

也许你可以得到更好的结果,而不是重新定义凸矩形。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16609330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档