Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Splitview weird behavior
QtWS25 Last Chance

Splitview weird behavior

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
13 Posts 3 Posters 1.0k Views
  • 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.
  • JoeCFDJ JoeCFD

    @Imynn Can you show a picture about your issue? I tested it with qmlscene on Ubuntu 22.04 and did not see any problem.

    I Offline
    I Offline
    Imynn
    wrote on last edited by Imynn
    #3

    @JoeCFD Sure. As you can see on the screen, after shrinking the window, red has minimum width, and it is out of window bounds. Once I touch handle, it will shrink the blue rectangle, so the minimum of the red will be within window bounds. SplitView bug.png

    JoeCFDJ I 2 Replies Last reply
    0
    • I Imynn

      @JoeCFD Sure. As you can see on the screen, after shrinking the window, red has minimum width, and it is out of window bounds. Once I touch handle, it will shrink the blue rectangle, so the minimum of the red will be within window bounds. SplitView bug.png

      JoeCFDJ Offline
      JoeCFDJ Offline
      JoeCFD
      wrote on last edited by
      #4

      @Imynn Check the numbers. I tried the following and the layout seems ok. The width of Red area is squeezed below 200.

          SplitView {
              anchors.fill: parent
              Rectangle {
                  SplitView.maximumWidth: 434
                  SplitView.minimumWidth: 434
                  color: "blue"
              }
      
      JoeCFDJ 1 Reply Last reply
      0
      • JoeCFDJ JoeCFD

        @Imynn Check the numbers. I tried the following and the layout seems ok. The width of Red area is squeezed below 200.

            SplitView {
                anchors.fill: parent
                Rectangle {
                    SplitView.maximumWidth: 434
                    SplitView.minimumWidth: 434
                    color: "blue"
                }
        
        JoeCFDJ Offline
        JoeCFDJ Offline
        JoeCFD
        wrote on last edited by
        #5

        @JoeCFD With your code, I can not move the blue area to width 434. the splitter stops at where red area has width 200.

        import QtQuick.Window 2.15
        import QtQuick.Controls 2.15
        Window {
           width: 474
           height: 480
           visible: true
           title: qsTr("Hello World")
           SplitView {
               anchors.fill: parent
               Rectangle {
                   SplitView.preferredWidth: 200
                   SplitView.minimumWidth: 200
                   color: "blue"
               }
               Rectangle {
                   color: "red"
                   SplitView.minimumWidth: 200
               }
           }
        }
        
        I 1 Reply Last reply
        0
        • JoeCFDJ JoeCFD

          @JoeCFD With your code, I can not move the blue area to width 434. the splitter stops at where red area has width 200.

          import QtQuick.Window 2.15
          import QtQuick.Controls 2.15
          Window {
             width: 474
             height: 480
             visible: true
             title: qsTr("Hello World")
             SplitView {
                 anchors.fill: parent
                 Rectangle {
                     SplitView.preferredWidth: 200
                     SplitView.minimumWidth: 200
                     color: "blue"
                 }
                 Rectangle {
                     color: "red"
                     SplitView.minimumWidth: 200
                 }
             }
          }
          
          I Offline
          I Offline
          Imynn
          wrote on last edited by
          #6

          @JoeCFD Yes, once it stops, shrink the window. And handle won't move and splitview children won't resize. So window size gets smaller, and splitview children don't change their width, which causes blue rectangle to be out of window bounds

          1 Reply Last reply
          0
          • I Imynn

            @JoeCFD Sure. As you can see on the screen, after shrinking the window, red has minimum width, and it is out of window bounds. Once I touch handle, it will shrink the blue rectangle, so the minimum of the red will be within window bounds. SplitView bug.png

            I Offline
            I Offline
            Imynn
            wrote on last edited by
            #7

            @Imynn this is after shrinking the window. Initially the window was 640x480

            JoeCFDJ 1 Reply Last reply
            0
            • I Imynn

              @Imynn this is after shrinking the window. Initially the window was 640x480

              JoeCFDJ Offline
              JoeCFDJ Offline
              JoeCFD
              wrote on last edited by
              #8

              @Imynn I tried it on Linux. After splitter stops, red area will disappear when I reduce the width of the window. No problem at all on Linux.

              I 1 Reply Last reply
              0
              • JoeCFDJ JoeCFD

                @Imynn I tried it on Linux. After splitter stops, red area will disappear when I reduce the width of the window. No problem at all on Linux.

                I Offline
                I Offline
                Imynn
                wrote on last edited by
                #9

                @JoeCFD Yes, red area disappears, because it's out of window bounds. It still has width 200 which is minimumWidth. The behavior that I expect is that it doesn't disappear, but instead moves to the left and blue rectangle shrinks. Is it achievable?

                JoeCFDJ 1 Reply Last reply
                0
                • I Imynn

                  @JoeCFD Yes, red area disappears, because it's out of window bounds. It still has width 200 which is minimumWidth. The behavior that I expect is that it doesn't disappear, but instead moves to the left and blue rectangle shrinks. Is it achievable?

                  JoeCFDJ Offline
                  JoeCFDJ Offline
                  JoeCFD
                  wrote on last edited by JoeCFD
                  #10

                  @Imynn remove
                  SplitView.minimumWidth: 200
                  from the first Rectangle(blue one).

                  I 1 Reply Last reply
                  0
                  • JoeCFDJ JoeCFD

                    @Imynn remove
                    SplitView.minimumWidth: 200
                    from the first Rectangle(blue one).

                    I Offline
                    I Offline
                    Imynn
                    wrote on last edited by Imynn
                    #11

                    @JoeCFD It didn't help either.

                    import QtQuick 2.15
                    import QtQuick.Window 2.15
                    import QtQuick.Controls 2.15
                    Window {
                        id: root
                        width: 640
                        height: 480
                        visible: true
                        title: qsTr("Hello World")
                        SplitView {
                            anchors.fill: parent
                            Rectangle {
                                id: rectBlue
                                SplitView.preferredWidth: 400
                                color: "blue"
                                Column {
                                    anchors.centerIn: parent
                                    Text {
                                        color: "white"
                                        text: "Red width %1".arg(rect.width)
                                    }
                                    Text {
                                        color: "white"
                                        text: "Window width %1".arg(root.width)
                                    }
                                    Text {
                                        color: "white"
                                        text: "Blue width %1".arg(rectBlue.width)
                                    }
                                }
                            }
                    
                            Rectangle {
                                id: rect
                                color: "red"
                                SplitView.minimumWidth: 200
                            }
                        }
                    }
                    
                    

                    With above code when I resize window (make it smaller) both Rectangles go out of the window bounds
                    5cb52c4d-8d33-42b9-9a3f-0a5e764bdc23-image.png
                    eba6f2f7-d717-4595-aa28-c87c46c1c181-image.png
                    These images are taken when inspecting the scene with gammaray. On the first screen you can see actual size of the blue rectangle, which is out of window bounds. On the second screen you can see size and position of the red rectangle which is out of window bounds as well. And text informations provides actual width of all components. What I expect after resizing the window according to the code I provided above: 200(minimumWidth) red width, 90 blue width, 6 handle, which in sum wiil give window width 296.

                    JoeCFDJ 1 Reply Last reply
                    0
                    • I Imynn

                      @JoeCFD It didn't help either.

                      import QtQuick 2.15
                      import QtQuick.Window 2.15
                      import QtQuick.Controls 2.15
                      Window {
                          id: root
                          width: 640
                          height: 480
                          visible: true
                          title: qsTr("Hello World")
                          SplitView {
                              anchors.fill: parent
                              Rectangle {
                                  id: rectBlue
                                  SplitView.preferredWidth: 400
                                  color: "blue"
                                  Column {
                                      anchors.centerIn: parent
                                      Text {
                                          color: "white"
                                          text: "Red width %1".arg(rect.width)
                                      }
                                      Text {
                                          color: "white"
                                          text: "Window width %1".arg(root.width)
                                      }
                                      Text {
                                          color: "white"
                                          text: "Blue width %1".arg(rectBlue.width)
                                      }
                                  }
                              }
                      
                              Rectangle {
                                  id: rect
                                  color: "red"
                                  SplitView.minimumWidth: 200
                              }
                          }
                      }
                      
                      

                      With above code when I resize window (make it smaller) both Rectangles go out of the window bounds
                      5cb52c4d-8d33-42b9-9a3f-0a5e764bdc23-image.png
                      eba6f2f7-d717-4595-aa28-c87c46c1c181-image.png
                      These images are taken when inspecting the scene with gammaray. On the first screen you can see actual size of the blue rectangle, which is out of window bounds. On the second screen you can see size and position of the red rectangle which is out of window bounds as well. And text informations provides actual width of all components. What I expect after resizing the window according to the code I provided above: 200(minimumWidth) red width, 90 blue width, 6 handle, which in sum wiil give window width 296.

                      JoeCFDJ Offline
                      JoeCFDJ Offline
                      JoeCFD
                      wrote on last edited by
                      #12

                      @Imynn said in Splitview weird behavior:

                      SplitView

                      https://doc.qt.io/qt-5/qml-qtquick-controls2-splitview.html

                      1 Reply Last reply
                      0
                      • B Offline
                        B Offline
                        burnack
                        wrote on last edited by
                        #13

                        Hi @Imynn , I just faced the same problem and was able to solve it the following way.
                        The problem is that from the documentation there is always 1 element in a SplitView that fills the width (height for vertical). And by default it is the last one. By regulating that element depending on the window width you can choose which one changes width along with the window. So I set red.fillWidth to false and blue.fillWidth to true when the window width is less than the threshold.
                        I even did smth like

                        splitview.onResizingChanged: if (!resizing) userBlueWidth = blue.width; // saving the blue width on the splitter drag release
                        fillerRectIndex: Window.width < userBlueWidth + splitter.width + red.minWidth ? blueIndex : redIndex
                        Red {
                        SplitView.fillWidth: fillRectIndex == redIndex
                        }
                        Blue {
                        SplitView.fillWidth: fillRectIndex == blueIndex
                        }

                        Then the blue becomes the filler and starts shrinking.
                        Good luck!

                        1 Reply Last reply
                        1

                        • Login

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