QT5 QPainter的别名绘制规则

问题描述 投票:2回答:1

我初来乍到的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。

所以我的问题是:

  • 什么是新的绘画规则实际上是?
  • 哪里是这些新规则的文档?
  • 为什么我的图像的右下角的“X”是不是在QT5对称?
qt5 qpainter
1个回答
1
投票

所以,我打开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);
© www.soinside.com 2019 - 2024. All rights reserved.