首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Qt5 QPainter别名绘图规则

Qt5 QPainter别名绘图规则
EN

Stack Overflow用户
提问于 2013-06-07 18:05:37
回答 1查看 2.1K关注 0票数 2

我是Qt的新手,我正在尝试使用以下测试代码进行一些QPainter绘图:

代码语言:javascript
复制
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相同的结果。

所以我的问题是:

  • 实际上,新的绘画规则是什么?
  • 这些新规则的文档在哪里?
  • 为什么我的图像右下角的"X“在Qt5中不对称?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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行样式)。例如:

代码语言:javascript
复制
painter.setPen(Qt::darkGreen);
painter.drawLine(QPointF(2.5, 7.5), QPointF(6.5, 1.5));

要一劳永逸地自动化这一点,一种更简单的方法是在创建画家之后进行以下调用:

代码语言:javascript
复制
painter.translate(0.5, 0.5);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16990326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档