【问题标题】:How to draw smooth ellipse (circle) in Qt?如何在 Qt 中绘制平滑的椭圆(圆)?
【发布时间】:2016-02-25 06:57:12
【问题描述】:

我需要为 circle 创建 QGraphicsItem,并且我得到的输出是与我的问题一起附加的输出。如何画出高质量的光滑圆? 以上是我的代码, 以上是我的输出。请帮助我解决这个问题。我已经使用 QPainter 属性尝试了 QGraphicsView 的抗锯齿和 SmoothPixMapTransform。但是,结果还是一样。

【问题讨论】:

  • 你的操作系统和 Qt 版本是什么?
  • 从截图可以看出操作系统是Ubuntu。
  • 复制代码而不是截图会更好。

标签: qt


【解决方案1】:

为视图设置抗锯齿渲染提示

http://doc.qt.io/qt-5/qgraphicsview.html#renderHints-prop

【讨论】:

  • 感谢回复,结果还是一样。
  • link 状态:指示引擎应尽可能消除图元边缘的锯齿。也许你的 GPU 不可能,或者你当前的图形驱动程序不支持它
【解决方案2】:

您的默认渲染引擎似乎不支持抗锯齿。

尝试使用-graphicssystem raster 命令行参数来强制进行光栅(软件)渲染。

还可以尝试 QtCreator 的“基本绘图”示例来检查小部件的呈现方式。

【讨论】:

    【解决方案3】:

    参见setStartAngle()setSpanAngle() 文档:

    将椭圆段的起始角度设置为角度,单位为 16 度

    将椭圆段的跨度角设置为角度,单位为16度

    您的 20 和 45(例如 1.25° 和 2.8125°)很可能不是您想要的。

    【讨论】:

    • 没错,但从截图中也很明显,也与实际问题无关。
    【解决方案4】:

    要启用抗锯齿,您应该添加以下行:

    view->setRenderHints(QPainter::Antialiasing);
    

    结果:

    • 抗锯齿

    • 正常

    【讨论】:

    • 他已经试过了:“我试过 QGraphicsView 的 Antialiasing 和 SmoothPixMapTransform”