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

Details

    • Bug
    • Resolution: Unresolved
    • 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

    Description

      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).

      Attachments

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

        Activity

          People

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

            Dates

              Created:
              Updated:

              Gerrit Reviews

                There are no open Gerrit changes