我尝试绘制一个圆角矩形drawRoundedRect
方法直接在QPixmap
(这里不涉及渲染引擎,除了纯 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 个不同角的矩形结束!像那样 :
我直接将像素图输出到一个文件中,以确保我在显示过程中没有刮擦它......相同的形状。
有人知道Qt小半径圆角矩形吗?我很久以前就看到过有关它的东西,但我不记得如何处理它!
看来您没有使用抗锯齿(即QPainter::Antialiasing
渲染提示)。这是 Qt 的一个怪癖,没有它就会发生。据我所见/所闻,Qt 开发人员并不太关心解决这个问题(无论如何,大多数人都想要抗锯齿)。
解决方法(除了仅使用抗锯齿之外)是自己绘制矩形QPainter::drawLine()
and QPainter::drawArc()
。您可能必须处理数字,直到它看起来正确为止 - 直接计算往往会导致一两个像素的偏差。另外,您可能会发现,即使使用此方法,右下角也永远不会exactly与其他角相同。
如果您感觉有点雄心勃勃,您可以尝试修复此问题并向 Qt 提交补丁。
Update:Qt 5 中的圆弧绘制结果发生了变化。根据我的经验,这是一个很大的改进。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)