gpt4 book ai didi

c++ - Qt圆角矩形,为什么角不一样?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:04:30 24 4
gpt4 key购买 nike

我尝试直接在 QPixmap 中使用 drawRoundedRect 方法绘制一个圆角矩形(这里不涉及渲染引擎,纯 Qt 除外 ...),我仔细检查了矩形的大小与我的像素图的大小:

Pixmap : QSize(50, 73) 
Rectangle: QRect(0,0 48x11)

看到足够的空间......

编辑:一些代码

pixmap = QPixmap(50,73); //example size that match my case
QRectF rect(0,0,48,11);

QPainter painter(&pixmap);
painter.setRenderHint(QPainter::TextAntialiasing);
painter.setWorldMatrixEnabled(false);
painter.setPen(QPen()); //no pen
painter.setBrush(QBrush(color));
painter.drawRoundedRect(rect, 2.0, 2.0);
  • 我阻碍了世界的转变......
  • 我将集合转换设置为统一...
  • 我尝试了几个半径 (1.0,2.0,3.0,4.0) ...
  • 我更改笔宽、画笔颜色...

但它总是以一个有 4 个不同角的矩形结束!像那样:

Radius = 3.0 in x and y

我直接将像素图输出到一个文件中,以确保在显示过程中我没有刮掉它……形状相同。

有人知道 Qt round rectangle with small radius 吗?我很久以前就看到过一些关于它的事情,但我不记得如何处理它!

最佳答案

看起来您没有使用抗锯齿(即 QPainter::Antialiasing 渲染提示)。这是没有它时发生的 Qt 怪癖。据我所见/所闻,Qt 开发人员并不十分关心解决这个问题(无论如何大多数人都想要抗锯齿)。

解决方法(除了使用抗锯齿之外)是使用 QPainter::drawLine()QPainter::drawArc() 自己绘制矩形。你可能不得不玩弄数字直到它看起来正确——直接计算往往会出现一两个像素。此外,您可能会发现,即使使用这种方法,右下角也永远不会与其他角完全相同。

如果您有点雄心勃勃,您可以尝试修复此问题并向 Qt 提交补丁。

更新:Qt 5 中的弧线绘制结果发生了变化。根据我的经验,这是一个很大的改进。

关于c++ - Qt圆角矩形,为什么角不一样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6507511/

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