Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Issues with QScrollArea and custom widget
Forum Updated to NodeBB v4.3 + New Features

Issues with QScrollArea and custom widget

Scheduled Pinned Locked Moved Solved General and Desktop
qscrollarea
23 Posts 4 Posters 9.1k Views 4 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • Joel BodenmannJ Offline
    Joel BodenmannJ Offline
    Joel Bodenmann
    wrote on last edited by
    #9

    I just checked (using qDebug() inside UGfxDisplay::paintEvent()) and they (UGfxDisplay::_width() and UGfxDisplay::width()) are always the same value (and they don't change when zooming).
    Keep in mind that UGfxDisplay::width() returns the width of my virtual display which is not supposed to change even if the person zooms in. This is not like QWidget::width() which would return _width * _scale (which it does as I always call QWidget::setFixedSize(_scale*_width, _scale*_height).

    I assume that QScrollArea calls QWidget::width() and not UGfxDisplay::width() as it only has the pointer to the QWidget anyway.

    Renaming my width() and height() methods would be quite an effort as they are used on many places. Is the QtCreator refactoring algorithm up to the task? ;)

    Industrial process automation software: https://simulton.com
    Embedded Graphics & GUI library: https://ugfx.io

    kshegunovK 1 Reply Last reply
    0
    • Joel BodenmannJ Joel Bodenmann

      I just checked (using qDebug() inside UGfxDisplay::paintEvent()) and they (UGfxDisplay::_width() and UGfxDisplay::width()) are always the same value (and they don't change when zooming).
      Keep in mind that UGfxDisplay::width() returns the width of my virtual display which is not supposed to change even if the person zooms in. This is not like QWidget::width() which would return _width * _scale (which it does as I always call QWidget::setFixedSize(_scale*_width, _scale*_height).

      I assume that QScrollArea calls QWidget::width() and not UGfxDisplay::width() as it only has the pointer to the QWidget anyway.

      Renaming my width() and height() methods would be quite an effort as they are used on many places. Is the QtCreator refactoring algorithm up to the task? ;)

      kshegunovK Offline
      kshegunovK Offline
      kshegunov
      Moderators
      wrote on last edited by
      #10

      No idea, my code is usually so bad it doesn't need refactoring but plain rewriting. ;)

      Anyway, forget that for a moment, can you try something like this:

      painter.drawImage(event->rect(), img, img.rect().intersected(event->rect()));
      

      Read and abide by the Qt Code of Conduct

      1 Reply Last reply
      0
      • Joel BodenmannJ Offline
        Joel BodenmannJ Offline
        Joel Bodenmann
        wrote on last edited by
        #11

        @kshegunov said in Issues with QScrollArea and custom widget:

        No idea, my code is usually so bad it doesn't need refactoring but plain rewriting. ;)

        Still waiting on my QAbstractModel merging thingy ;)

        Anyway, forget that for a moment, can you try something like this:

        Here you go: https://www.screencast.com/t/nNbHckWi

        Industrial process automation software: https://simulton.com
        Embedded Graphics & GUI library: https://ugfx.io

        kshegunovK 1 Reply Last reply
        0
        • Joel BodenmannJ Joel Bodenmann

          @kshegunov said in Issues with QScrollArea and custom widget:

          No idea, my code is usually so bad it doesn't need refactoring but plain rewriting. ;)

          Still waiting on my QAbstractModel merging thingy ;)

          Anyway, forget that for a moment, can you try something like this:

          Here you go: https://www.screencast.com/t/nNbHckWi

          kshegunovK Offline
          kshegunovK Offline
          kshegunov
          Moderators
          wrote on last edited by
          #12

          @Joel-Bodenmann said in Issues with QScrollArea and custom widget:

          Still waiting on my QAbstractModel merging thingy ;)

          I know, I know.

          Here you go: https://www.screencast.com/t/nNbHckWi

          Well, something moved at least. Can you get the paint rects you get when zoomin in/out and when you scroll up/down/left/right along with the image rects and dump them all into a file?

          Read and abide by the Qt Code of Conduct

          Joel BodenmannJ 1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #13

            Hi,

            Might be a silly question but how are you handling UGfxDisplay ?

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • Joel BodenmannJ Offline
              Joel BodenmannJ Offline
              Joel Bodenmann
              wrote on last edited by
              #14

              @kshegunov said in Issues with QScrollArea and custom widget:

              Well, something moved at least. Can you get the paint rects you get when zoomin in/out and when you scroll up/down/left/right along with the image rects and dump them all into a file?

              Sure, I'll get that done.

              @SGaist said in Issues with QScrollArea and custom widget:

              Might be a silly question but how are you handling UGfxDisplay ?

              I'm sorry, I don't understand what handling means in this context. Can you be more specific?

              Industrial process automation software: https://simulton.com
              Embedded Graphics & GUI library: https://ugfx.io

              1 Reply Last reply
              0
              • SGaistS Offline
                SGaistS Offline
                SGaist
                Lifetime Qt Champion
                wrote on last edited by
                #15

                Are you calling something like _centralScrollArea->setWidget(_myGDisplay); ?

                Then, are you sure that you should handle the scaling in GDisplay ?

                When zooming, what about having something like _myGDisplay->resize(_scale * _sourceSize); So you only handle painting in that widget.

                Interested in AI ? www.idiap.ch
                Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                1 Reply Last reply
                0
                • kshegunovK kshegunov

                  @Joel-Bodenmann said in Issues with QScrollArea and custom widget:

                  Still waiting on my QAbstractModel merging thingy ;)

                  I know, I know.

                  Here you go: https://www.screencast.com/t/nNbHckWi

                  Well, something moved at least. Can you get the paint rects you get when zoomin in/out and when you scroll up/down/left/right along with the image rects and dump them all into a file?

                  Joel BodenmannJ Offline
                  Joel BodenmannJ Offline
                  Joel Bodenmann
                  wrote on last edited by
                  #16

                  @kshegunov said in Issues with QScrollArea and custom widget:

                  Well, something moved at least. Can you get the paint rects you get when zoomin in/out and when you scroll up/down/left/right along with the image rects and dump them all into a file?

                  Here you go: http://paste.ugfx.io/show/a5113bcc08

                  @SGaist said in Issues with QScrollArea and custom widget:

                  Are you calling something like _centralScrollArea->setWidget(_myGDisplay); ?

                  Yep, that's what I am doing.

                  @SGaist said in Issues with QScrollArea and custom widget:

                  When zooming, what about having something like _myGDisplay->resize(_scale * _sourceSize); So you only handle painting in that widget.

                  In my opinion that won't work as it will not scale up the contents inside of my UGfxDisplay. Keep in mind that the QPixmap I draw in my UGfxDisplay::paintEvent() is the content of a virtual display. That virtual display has a given size (width and height) in pixels. When zooming in I need to scale up everything. I don't display more of the widget, I just display the same content bigger.

                  Industrial process automation software: https://simulton.com
                  Embedded Graphics & GUI library: https://ugfx.io

                  kshegunovK 1 Reply Last reply
                  0
                  • Joel BodenmannJ Joel Bodenmann

                    @kshegunov said in Issues with QScrollArea and custom widget:

                    Well, something moved at least. Can you get the paint rects you get when zoomin in/out and when you scroll up/down/left/right along with the image rects and dump them all into a file?

                    Here you go: http://paste.ugfx.io/show/a5113bcc08

                    @SGaist said in Issues with QScrollArea and custom widget:

                    Are you calling something like _centralScrollArea->setWidget(_myGDisplay); ?

                    Yep, that's what I am doing.

                    @SGaist said in Issues with QScrollArea and custom widget:

                    When zooming, what about having something like _myGDisplay->resize(_scale * _sourceSize); So you only handle painting in that widget.

                    In my opinion that won't work as it will not scale up the contents inside of my UGfxDisplay. Keep in mind that the QPixmap I draw in my UGfxDisplay::paintEvent() is the content of a virtual display. That virtual display has a given size (width and height) in pixels. When zooming in I need to scale up everything. I don't display more of the widget, I just display the same content bigger.

                    kshegunovK Offline
                    kshegunovK Offline
                    kshegunov
                    Moderators
                    wrote on last edited by
                    #17

                    Have you noticed your image doesn't grow (or shrink)?

                    Read and abide by the Qt Code of Conduct

                    1 Reply Last reply
                    0
                    • Joel BodenmannJ Offline
                      Joel BodenmannJ Offline
                      Joel Bodenmann
                      wrote on last edited by
                      #18

                      The image is not supposed to grow. The image represents the contents of the virtual display. It will always have the same amount of pixels no matter how much I zoom into the UGfxDisplay widget. My virtual display does not grow by zooming into it :p

                      Industrial process automation software: https://simulton.com
                      Embedded Graphics & GUI library: https://ugfx.io

                      kshegunovK 1 Reply Last reply
                      0
                      • Joel BodenmannJ Joel Bodenmann

                        The image is not supposed to grow. The image represents the contents of the virtual display. It will always have the same amount of pixels no matter how much I zoom into the UGfxDisplay widget. My virtual display does not grow by zooming into it :p

                        kshegunovK Offline
                        kshegunovK Offline
                        kshegunov
                        Moderators
                        wrote on last edited by kshegunov
                        #19

                        But why are you redrawing reinitializing it at each paint event then? It got me confused, now I believe I know what you want. Should be something like this (I *think*):

                        painter.drawImage(event->rect(), img, event->rect() / _scale);
                        

                        PS. Or not. I need to think.
                        PS. After thinking:

                        QRect paintRect = event->rect();
                        QRect sourceRect(paintRect.topLeft() / _scale, paintRect.size() / _scale);
                        painter.drawImage(paintRect, img, sourceRect);
                        

                        Read and abide by the Qt Code of Conduct

                        1 Reply Last reply
                        2
                        • Joel BodenmannJ Offline
                          Joel BodenmannJ Offline
                          Joel Bodenmann
                          wrote on last edited by Joel Bodenmann
                          #20

                          Wooo, I love you \o/ (still, not again, don't worry honey)

                          This is with your "After thinking" code: https://www.screencast.com/t/cEAa2z4Zd

                          In retrospect this seems somewhat obvious...

                          Industrial process automation software: https://simulton.com
                          Embedded Graphics & GUI library: https://ugfx.io

                          kshegunovK 1 Reply Last reply
                          0
                          • Joel BodenmannJ Joel Bodenmann

                            Wooo, I love you \o/ (still, not again, don't worry honey)

                            This is with your "After thinking" code: https://www.screencast.com/t/cEAa2z4Zd

                            In retrospect this seems somewhat obvious...

                            kshegunovK Offline
                            kshegunovK Offline
                            kshegunov
                            Moderators
                            wrote on last edited by
                            #21

                            @Joel-Bodenmann said in Issues with QScrollArea and custom widget:

                            Wooo, I love you

                            Nice! Love and world peace and such things. ;)

                            In retrospect this seems somewhat obvious...

                            Yes, quantum mechanics also seems rather obvious to me ... after a few people thought and invented it. ;)

                            Read and abide by the Qt Code of Conduct

                            Joel BodenmannJ 1 Reply Last reply
                            0
                            • kshegunovK kshegunov

                              @Joel-Bodenmann said in Issues with QScrollArea and custom widget:

                              Wooo, I love you

                              Nice! Love and world peace and such things. ;)

                              In retrospect this seems somewhat obvious...

                              Yes, quantum mechanics also seems rather obvious to me ... after a few people thought and invented it. ;)

                              Joel BodenmannJ Offline
                              Joel BodenmannJ Offline
                              Joel Bodenmann
                              wrote on last edited by Joel Bodenmann
                              #22

                              @kshegunov said in Issues with QScrollArea and custom widget:

                              Yes, quantum mechanics also seems rather obvious to me ... after a few people thought and invented it. ;)

                              invented? ;)
                              Too bad those people didn't teach you how to write nice code though :p

                              Thank you for your help guys, much appreciated!

                              Industrial process automation software: https://simulton.com
                              Embedded Graphics & GUI library: https://ugfx.io

                              kshegunovK 1 Reply Last reply
                              0
                              • Joel BodenmannJ Joel Bodenmann

                                @kshegunov said in Issues with QScrollArea and custom widget:

                                Yes, quantum mechanics also seems rather obvious to me ... after a few people thought and invented it. ;)

                                invented? ;)
                                Too bad those people didn't teach you how to write nice code though :p

                                Thank you for your help guys, much appreciated!

                                kshegunovK Offline
                                kshegunovK Offline
                                kshegunov
                                Moderators
                                wrote on last edited by
                                #23

                                @Joel-Bodenmann said in Issues with QScrollArea and custom widget:

                                Too bad those people didn't teach you how to write nice code though :p

                                This is all a fault of my own, sadly, but hey life's not all roses ... :)

                                Thank you for your help guys, much appreciated!

                                You are welcome. Now go and make us proud! ;D

                                Read and abide by the Qt Code of Conduct

                                1 Reply Last reply
                                0

                                • Login

                                • Login or register to search.
                                • First post
                                  Last post
                                0
                                • Categories
                                • Recent
                                • Tags
                                • Popular
                                • Users
                                • Groups
                                • Search
                                • Get Qt Extensions
                                • Unsolved