我是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)给了我完全不同的结果。
它看起来不像Qt5跟随在它自己的官方文档中描述的规则。但是,有一个新的QPainter::Qt4CompatiblePainting呈现提示。如果我设置它,它确实会给出与Qt4相同的结果。
所以我的问题是:
发布于 2013-06-10 08:39:47
因此,我在Qt跟踪器上打开了一个错误,并得到了Gunnar的以下响应:
栅格化规则在Qt 5中得到了改进和一致,这是正确的。它们现在与我们呈现反别名图形的方式是一致的(这一直是正确的方法)。别名图形总是在Qt 4中以一种断断续续的方式被-0.5关闭,这导致了各种各样的问题。应该相应地更新文档。所有右下角移位逻辑仅适用于Qt4 compat模式. 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);https://stackoverflow.com/questions/16990326
复制相似问题