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

QWindow paintEvent and exposeEvent are invoked too many time when resizing window on scaled display (device pixel ratio > 1)

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P3: Somewhat important P3: Somewhat important
    • None
    • 6.2.4, 6.4.0
    • GUI: Window management
    • None
    • Windows 10, 4K display (I haven't tested low res. display yet)
    • Windows

      Using this minimum reproducible example code:

      #include <QExposeEvent>
      #include <QGuiApplication>
      #include <QPaintEvent>
      #include <QResizeEvent>
      #include <QWindow>
      
      class Window : public QWindow
      {
      protected:
          void paintEvent(QPaintEvent *event) override
          {
              qDebug() << event;
              QWindow::paintEvent(event);
          }
      
          void exposeEvent(QExposeEvent *event) override
          {
              qDebug() << event;
              QWindow::exposeEvent(event);
          }
      
          void resizeEvent(QResizeEvent *event) override
          {
              qDebug() << event;
              QWindow::resizeEvent(event);
          }
      };
      
      int main(int argc, char *argv[])
      {
          QGuiApplication a(argc, argv);
          Window w;
          w.show();
          return a.exec();
      }
      

      Steps to reproduce:
      1) Run the code
      2) Grip the right edge (or any edge) of the window with the mouse and start resizing the window
      3) While resize event is logged only once for each size step change, paint event and expose event are logged sometimes twice.

      QResizeEvent(541, 160)
      QPaintEvent(QRegion(0,0 541x160))
      QExposeEvent(QRegion(0,0 541x160))
      QPaintEvent(QRegion(0,0 541x160))
      QExposeEvent(QRegion(0,0 541x160))
      QResizeEvent(542, 160)
      QPaintEvent(QRegion(0,0 542x160))
      QExposeEvent(QRegion(0,0 542x160))
      QPaintEvent(QRegion(0,0 542x160))
      QExposeEvent(QRegion(0,0 542x160))
      QResizeEvent(543, 160)
      QPaintEvent(QRegion(0,0 543x160))
      QExposeEvent(QRegion(0,0 543x160))
      QResizeEvent(544, 160)
      QPaintEvent(QRegion(0,0 544x160))
      QExposeEvent(QRegion(0,0 544x160))
      QPaintEvent(QRegion(0,0 544x160))
      QExposeEvent(QRegion(0,0 544x160))
      

      Expected output would be:

      QResizeEvent(541, 160)
      QPaintEvent(QRegion(0,0 541x160))
      QExposeEvent(QRegion(0,0 541x160))
      QResizeEvent(542, 160)
      QPaintEvent(QRegion(0,0 542x160))
      QExposeEvent(QRegion(0,0 542x160))
      QResizeEvent(543, 160)
      QPaintEvent(QRegion(0,0 543x160))
      QExposeEvent(QRegion(0,0 543x160))
      QResizeEvent(544, 160)
      QPaintEvent(QRegion(0,0 544x160))
      QExposeEvent(QRegion(0,0 544x160))
      

      The expected output is what I get on other platforms (X11, macOS) or with scaling of 100 % (device pixel ratio = 1).

        No reviews matched the request. Check your Options in the drop-down menu of this sections header.

            vestbo Tor Arne Vestbø
            vladimir.kraus Vladimir Kraus
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

              Created:
              Updated:

                There are no open Gerrit changes