m
12 июля 2017 г. 0:05

QML Canvas + Line. Bug?

Пришлось порисовать, использовал для этого канвас.  И оказалось, что он как-то глючно работает.
Во-первых, появляются артефакты при большом количестве отрисовываемых элементов (алгоритм был очень неоптимизированный, исправил, потому пример дать не могу),
Во-вторых, такой артефакт стабильно держится: если для отрисовываемой линии lineWidth выставлен больше одного, а следующая линия расположена под небольшим углом к прошлой линии, то появляется продолжение линии. Вот небольшой код, на котором у меня это повторяется. Qt 5.9.0 GCC 64bit, Linux Debian
 
    Canvas {
        id: myCanvas
        anchors.fill: parent

        onPaint: {
            var ctx = getContext('2d')

            ctx.lineWidth = 3
            ctx.strokeStyle = "#37474f"
            ctx.beginPath()
            ctx.moveTo(130.5, 38);
            ctx.lineTo(130.5, 150);
            ctx.lineTo(126, 85);
            ctx.stroke()
        }
    }
 
На скриншоте видно разницу с HTML версией canvas, как это должно выглядеть.

Screenshot_20170711_204635.png
2

Вам это нравится? Поделитесь в социальных сетях!

2
Evgenii Legotckoi
  • 12 июля 2017 г. 2:30
  • Ответ был помечен как решение.

В QML у Context2D в Canvas есть свойство miterLimit, выставьте его на 1 или даже на 0.1 тогда будет выглядеть так, как вы хотите.

    Canvas {
          id: myCanvas
          anchors.fill: parent


          onPaint: {
              var ctx = getContext('2d')

              ctx.lineWidth = 3
              ctx.miterLimit = 0.1  // Вот эта настройка
              ctx.strokeStyle = "#37474f"
              ctx.beginPath()
              ctx.moveTo(130.5, 38);
              ctx.lineTo(130.5, 150);
              ctx.lineTo(126, 85);
              ctx.stroke()
          }
      }
    m
    • 12 июля 2017 г. 3:28

    Вот оно что, значит не баг) Спасибо

      Комментарии

      Только авторизованные пользователи могут публиковать комментарии.
      Пожалуйста, авторизуйтесь или зарегистрируйтесь