我初来乍到的Qt,我试图做一些QPainter
用下面的测试代码绘制:
QPixmap pixmap(20, 20);
pixmap.fill(Qt::white);
QPainter painter(&pixmap);
// Draw a rectangle (works fine in both Qt4 and Qt5)
painter.setPen(Qt::blue);
painter.drawLine(0, 0, 10, 0);
painter.drawLine(0, 0, 0, 10);
painter.drawLine(10, 0, 10, 10);
painter.drawLine(0, 10, 10, 10);
// Draw an example line from official docs (broken in Qt5)
painter.setPen(Qt::darkGreen);
painter.drawLine(2, 7, 6, 1);
// Draw an X (broken in Qt5)
painter.drawLine(13, 13, 18, 18);
painter.drawLine(13, 18, 18, 13);
不知何故,Qt4的(4.8.4)和QT5(5.0.1,5.0.2)给我完全不同results。
它看起来并不像QT5遵循rules described in its own official docs。然而,有一个新的QPainter::Qt4CompatiblePainting
渲染提示。如果我将它,它确实给了我相同的结果的Qt4。
所以我的问题是:
所以,我打开Qt的跟踪一个bug并获得通过贡纳尔Sletta以下回应:
这是正确的,光栅化规则进行了改进,并取得一致,Qt的5他们现在是我们如何渲染抗锯齿图形(这是总是正确的方式)相一致。锯齿图形总是关闭的情况的0.5在Qt的4破路由此引起的一切问题的排序。该文档应随之更新。所有右下方移逻辑仅适用于的Qt4兼容模式。
默认的中小盘风格(我们如何平局结束点)QPEN是Qt的:: SquareCap。这意味着线成为半个像素较长的在每个方向上,共计到焊盘在底部一个像素。帽样式设置为FlatCap和额外的像素消失,因为它应该。
我进一步的实验显示,只设置笔风格Qt::FlatCap
是不够的 - 它仍然留下了一些问题(其他实物)。要得到这样的Qt4的结果,而不兼容标志,现在正确的方法似乎是使用浮点坐标,而不是整数,增加0.5到所有端点(不设置Qt::FlatCap
线条样式)。例如:
painter.setPen(Qt::darkGreen);
painter.drawLine(QPointF(2.5, 7.5), QPointF(6.5, 1.5));
以一劳永逸自动化这个更简单的方法是让下面的调用创建画家后:
painter.translate(0.5, 0.5);