【问题标题】:Why do my my line widths looks different in a QGraphicsScene with the same QPen width?为什么我的线宽在具有相同 QPen 宽度的 QGraphicsScene 中看起来不同?
【发布时间】:2012-03-19 21:05:19
【问题描述】:

我使用QPainter 用这段代码绘制我的小部件:

QPen pen(Qt::black, 0.6, Qt::SolidLine);
QPainter painter(this);
painter.setPen(pen);

// vertical 
painter.drawLine(startX,0,startX,50);
painter.drawLine((startX += grid),0,startX,50);
painter.drawLine((startX += grid),0,startX,50);
painter.drawLine((startX += grid),0,startX,50);
painter.drawLine((startX += grid),0,startX,50);
painter.drawLine((startX += grid),0,startX,50);

// horizontal 
pen.setWidth(0.7);
painter.setPen(pen);
painter.drawLine(0,grid*2,70,grid*2);
painter.drawLine(0,grid*4,70,grid*4);
painter.drawLine(0,grid*6,70,grid*6);
painter.drawLine(0,grid*8,70,grid*8);

当我将此项目添加到 QGraphicsScene 时,线条的宽度有时看起来会有所不同,尤其是当我放大时。谁能解释为什么会发生这种情况以及可以做些什么来解决它?

此屏幕截图演示了问题:

【问题讨论】:

  • 感谢您的编辑,@Arnold Spence

标签: qt qgraphicsview qpainter qgraphicsscene


【解决方案1】:

这是浮点舍入和场景插值/渲染的副作用。在大多数缩放级别,从场景像素到视图像素不会有完美的一对一匹配。对于分数笔宽度尤其如此。您可以通过在 QGraphicsView 中打开抗锯齿功能使事情看起来更平滑:

...
view.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
....

还有other rendering hints也可以传入。

【讨论】:

  • 非常感谢,它看起来好多了。线条的边缘不是那么锐利,有点模糊。我的问题也发生在QGraphicsPixelItem,图片质量下降很多,有时线条消失了,有时它变宽了,如果有解决办法吗?如您所知,当您使用某些图片查看器来缩放图像时,您不会观察到这种行为。
  • 如果你的意思是QGraphicsPixmapItem,也有一个渲染提示。我已将其添加到上面的答案中。
猜你喜欢
  • 2018-12-07
  • 2019-12-26
  • 2020-03-10
  • 1970-01-01
  • 2021-01-07
  • 2011-01-15
  • 1970-01-01
  • 1970-01-01
  • 2017-02-27
相关资源
最近更新 更多