Uploaded image for project: 'Qt'
  1. Qt
  2. QTBUG-35513

QPen::setStyle with Qt::DashLine corrupts rendering colors

XMLWordPrintable

    • de3b2541de380c04008cce7937076e10496cb78b (qt/qtbase/dev) 5d9e7e7305fc0cbed8f7be80fb996f3ac653ff75 (qt/qtbase/5.15)

      Calling:

      pen->setStyle( Qt::DashLine );

      inside a QGLWidget's paint function can cause sudden pen color changes when drawing other things such as rects or QPainterPath's and simple lines. The pen color seems to change to colors of other objects that are drawn, but only sometimes.

      As soon as drawing only solid lines, no problems. Also the software renderer handles things fine and doesn't show this problem.

      Even in the next frames, items that are painted BEFORE the actual setStyle call will get a wrong color, even while we directly do a setPen and setBrush before painting. It is internally overwritten by Qt somehow.

      I know this might be vague, but the setStyle function, and probably setDashOffset do something that might overwrite memory somewhere or so. It is only at some times that the color changes, depending on what else is drawn on the screen.

      The problem is this happens in quite a big codebase. I am not sure if it is easy to reproduce in a small example, but it is certainly a Qt bug.

      Everything renders fine, until I start drawing some lines with the dashed pattern. Other non-solid styles also show the same issue. Only solid style's prevent this bug from happening.

        1. DashBug.rar
          4 kB
          John van der Burg
        2. DashBugExecutable.rar
          12 kB
          John van der Burg
        3. qtbug35513.zip
          2 kB
          Joni Poikelin
        For Gerrit Dashboard: QTBUG-35513
        # Subject Branch Project Status CR V

            qt.team.graphics.and.multimedia Qt Graphics Team
            buckshag John van der Burg
            Votes:
            3 Vote for this issue
            Watchers:
            9 Start watching this issue

              Created:
              Updated:
              Resolved:

                There are no open Gerrit changes