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. Is it possible to set a dynamic height for Tableview ?
Forum Updated to NodeBB v4.3 + New Features

Is it possible to set a dynamic height for Tableview ?

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
13 Posts 3 Posters 2.9k Views 2 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.
  • A Arkning

    Hi,

    So I wanted to have a TableView between two button and when I set the top anchors it works but when I add the bottom one I can't see the window of my application. So my question is why when the height is dynamic for TableView it doesn't work ? And is there an equivalent of tableView in QtQuick.Controls 2.1 ?

    I can post my code if its needed.

    Thanks in advance for the answers.

    sierdzioS Offline
    sierdzioS Offline
    sierdzio
    Moderators
    wrote on last edited by
    #2

    @Arkning said in Is it possible to set a dynamic height for Tableview ?:

    And is there an equivalent of tableView in QtQuick.Controls 2.1 ?

    Not yet. More info http://blog.qt.io/blog/2016/10/06/qt-quick-controls-2-1-and-beyond/

    (Z(:^

    A 1 Reply Last reply
    1
    • sierdzioS sierdzio

      @Arkning said in Is it possible to set a dynamic height for Tableview ?:

      And is there an equivalent of tableView in QtQuick.Controls 2.1 ?

      Not yet. More info http://blog.qt.io/blog/2016/10/06/qt-quick-controls-2-1-and-beyond/

      A Offline
      A Offline
      Arkning
      wrote on last edited by
      #3

      @sierdzio ok Thanks but do you have any clue why when I want a dynamic Tableview is doesn't work ?

      1 Reply Last reply
      0
      • sierdzioS Offline
        sierdzioS Offline
        sierdzio
        Moderators
        wrote on last edited by
        #4

        Have your tried putting it into a ColumnLayout? Something like:

        ColumnLayout {
        Button {}
        TableView {}
        Button {}
        }
        

        Also, when you set up anchors, remember to set left and right one, too (or at least set "width" property) otherwise - maybe - your table view is there, but with width == 0 and thus invisible.

        (Z(:^

        A 2 Replies Last reply
        0
        • sierdzioS sierdzio

          Have your tried putting it into a ColumnLayout? Something like:

          ColumnLayout {
          Button {}
          TableView {}
          Button {}
          }
          

          Also, when you set up anchors, remember to set left and right one, too (or at least set "width" property) otherwise - maybe - your table view is there, but with width == 0 and thus invisible.

          A Offline
          A Offline
          Arkning
          wrote on last edited by
          #5

          @sierdzio Yes it's in a ColumnLayout but the problem has I said it's not the width but the height actually. The problem is that if i set for example :
          anchors.top: button_1.bottom
          anchors.bottom: button_2.top
          It doesn't work but it works if I do :
          anchors.top or bottom + asign a implicitHeight or preferredHeight but if I give a dynamic value to those element it doesn't work.

          1 Reply Last reply
          0
          • sierdzioS sierdzio

            Have your tried putting it into a ColumnLayout? Something like:

            ColumnLayout {
            Button {}
            TableView {}
            Button {}
            }
            

            Also, when you set up anchors, remember to set left and right one, too (or at least set "width" property) otherwise - maybe - your table view is there, but with width == 0 and thus invisible.

            A Offline
            A Offline
            Arkning
            wrote on last edited by
            #6

            @sierdzio There is my code :
            ColumnLayout {
            id: mainview
            anchors.fill: parent

            Text {
                id: typo
                text: qsTr("Typologie")
                font.pointSize: 20
                anchors.verticalCenter: mainview.top
                anchors.horizontalCenter: mainview.left
                anchors.verticalCenterOffset: typo.contentHeight
                anchors.horizontalCenterOffset: typo.contentWidth
            }
            
            ComboBox {
                id: cb
                model: [ "", "house 1", "house 2", "house 3", "house 4", "house 5" ]
                Layout.preferredWidth: 300
                anchors.verticalCenter: typo.verticalCenter
                anchors.horizontalCenter: mainview.horizontalCenter
            }
            
            Button {
                id: o_typo
                onClicked: dialog.open()
                Layout.preferredWidth: o_typo_text.contentWidth + 30
                anchors.verticalCenter: typo.verticalCenter
                anchors.horizontalCenter: mainview.right
                anchors.horizontalCenterOffset: - o_typo.width
            
                Text {
                    id: o_typo_text
                    text: "Gérer les typologies..."
                    anchors.centerIn: parent
                }
            }
            
            Dialog {
                id: dialog
                x: 400
                y: 100
                width: 800
                modal: true
                focus: true
                title: qsTr("Gestion des typologies")
                height: 700
                //standardButtons: Dialog.Ok | Dialog.Cancel | Dialog.Save
                onAccepted: console.log("Ok clicked")
                onRejected: console.log("Cancel clicked")
            
                ColumnLayout {
                    id: v_top
            
                    Text {
                        id: n_typo
                        Layout.topMargin: 30
                        Layout.leftMargin: 30
                        text: qsTr("Typologie")
                        font.pointSize: 20
                    }
            
                    ComboBox {
                        id: n_cb
                        Layout.leftMargin: 400
                        Layout.preferredWidth: 300
                        anchors.verticalCenter: n_typo.verticalCenter
                        model: [ "", "house 1", "house 2", "house 3", "house 4", "house 5" ]
                    }
            
                    CheckBox { id:opt1 ; text: qsTr("Opt 1") ; Layout.leftMargin: 30 ; Layout.preferredWidth: 100 }
                    CheckBox { id:opt2 ; text: qsTr("Opt 2") ; Layout.leftMargin: 30 ; Layout.preferredWidth: 100 }
                    CheckBox { id:opt3 ; text: qsTr("Opt 3") ; Layout.leftMargin: 30 ; Layout.preferredWidth: 100 }
            
                    Text {
                        id: t_opt
                        anchors.verticalCenter: opt1.verticalCenter
                        anchors.horizontalCenter: n_cb.horizontalCenter
                        text: qsTr("XX")
                    }
            
                    ComboBox {
                        anchors.verticalCenter: t_opt.verticalCenter
                        Layout.alignment: Qt.AlignRight
                        model: [ "", "1", "2", "3..." ]
                    }
            
                    Text {
                        id: t_opt1
                        anchors.verticalCenter: opt2.verticalCenter
                        anchors.horizontalCenter: n_cb.horizontalCenter
                        text: qsTr("YY")
                    }
            
                    ComboBox {
                        anchors.verticalCenter: t_opt1.verticalCenter
                        Layout.alignment: Qt.AlignRight
                        model: [ "", "1", "2", "3..." ]
                    }
                }
            
                footer: DialogButtonBox {
                    Button { id: end ; text: qsTr("Quitter") ; onClicked: dialog.close() }
                }
            }
            
            Button {
                id: check
                anchors.left: o_typo.left
                anchors.right: o_typo.right
                anchors.verticalCenter: parent.bottom
                anchors.verticalCenterOffset: - check.height
            
                Text { id: check_text ; text: "Valider les typologies" ; anchors.centerIn: parent }
            }
            
            Rectangle {
                id: tricks
                color: "white"
                anchors.left: typo.left
                anchors.right: o_typo.right
                anchors.top: typo.bottom
                anchors.bottom: check.top
            }
            
            ListModel {
                id: equipmentModel
            
                ListElement  {  name: "sofa" ; state: "OUI" }
                ListElement  {  name: "TV" ; state: "NON" }
            }
            
            TableView {
                id: view
                width: parent.width
                implicitHeight: 200
                anchors.left: typo.left
                //anchors.bottom: check.top
                anchors.top: typo.bottom
                anchors.right: o_typo.right
                anchors.topMargin: 50
            
                TableViewColumn {
                    role: "name"
                    title: qsTr("Equipment")
                    width: view.width / 3
                    movable: false
                    resizable: false
                }
            
                TableViewColumn {
                    movable: false
                    resizable: false
                    width: view.width / 3
                    title: qsTr("Connecté")
                    role: "state"
                    delegate: Rectangle {
                        color: if (styleData.value === "OUI") { "white" }
                               else { "orange" }
            
                        Text { text: styleData.value }
                    }
                }
            
                TableViewColumn {
                    movable: false
                    resizable: false
                    width: view.width / 3
                    title: qsTr("Reference")
                    role: "reference"
                    delegate: ComboBox {
                        anchors.fill: parent
                        model: [ "Reference", "Test", "N/A" ]
                    }
                }
                model: equipmentModel
            }
            

            }

            1 Reply Last reply
            0
            • O Offline
              O Offline
              Oussama Kh - IPeculiar
              wrote on last edited by Oussama Kh - IPeculiar
              #7

              that's the expected logical behaviour for your code
              when you set

              anchors.top: typo.bottom
              anchors.bottom: check.top
              

              it's just like you set fixed height so it should have fixed height with scroll bar
              Note: when you use ColumnLayout you should not use anchors instead use
              Layout.fillWidth: true // for full width
              and let the height be automatically set

              now the best solution for you is to use flickable

              ColumnLayout {
                      anchors.fill: parent
              
                      Button {
                          implicitHeight: 48
                          Layout.fillWidth: true
                      }
              
                      Flickable {
                          clip: true
                          Layout.fillWidth: true
                          Layout.fillHeight: true // or give it fixed height depend on your needs
              
                          contentHeight: view.height
                          flickableDirection: Flickable.VerticalFlick
              
                          TableView {
                              id: view
                              width: parent.width
                          }
                      }
              
                      Button {
                          implicitHeight: 48
                          Layout.fillWidth: true
                      }
                  }
              
              A 1 Reply Last reply
              0
              • O Oussama Kh - IPeculiar

                that's the expected logical behaviour for your code
                when you set

                anchors.top: typo.bottom
                anchors.bottom: check.top
                

                it's just like you set fixed height so it should have fixed height with scroll bar
                Note: when you use ColumnLayout you should not use anchors instead use
                Layout.fillWidth: true // for full width
                and let the height be automatically set

                now the best solution for you is to use flickable

                ColumnLayout {
                        anchors.fill: parent
                
                        Button {
                            implicitHeight: 48
                            Layout.fillWidth: true
                        }
                
                        Flickable {
                            clip: true
                            Layout.fillWidth: true
                            Layout.fillHeight: true // or give it fixed height depend on your needs
                
                            contentHeight: view.height
                            flickableDirection: Flickable.VerticalFlick
                
                            TableView {
                                id: view
                                width: parent.width
                            }
                        }
                
                        Button {
                            implicitHeight: 48
                            Layout.fillWidth: true
                        }
                    }
                
                A Offline
                A Offline
                Arkning
                wrote on last edited by
                #8

                @Oussama-Kh---IPeculiar Thanks for the answer but I still have the same problem it doesn't do what i want.
                The Flickable juste made the TableView moving I don't want that, I just want that the eight of my TableView is the height between my top and bottom button.
                If I get it correctly the anchors doesn't work because the Tableview inherit Scrollbar ? Because when I set a rectangle with anchors top and bottom it works and its get the height that I want but I have no clue why it doesn't work with TableView or what can I do to make my TableView have the good height (of course it will never be a fixed height for me because I want a dynamic one)

                O 1 Reply Last reply
                0
                • A Arkning

                  @Oussama-Kh---IPeculiar Thanks for the answer but I still have the same problem it doesn't do what i want.
                  The Flickable juste made the TableView moving I don't want that, I just want that the eight of my TableView is the height between my top and bottom button.
                  If I get it correctly the anchors doesn't work because the Tableview inherit Scrollbar ? Because when I set a rectangle with anchors top and bottom it works and its get the height that I want but I have no clue why it doesn't work with TableView or what can I do to make my TableView have the good height (of course it will never be a fixed height for me because I want a dynamic one)

                  O Offline
                  O Offline
                  Oussama Kh - IPeculiar
                  wrote on last edited by
                  #9

                  @Arkning
                  the anchors doesn't work because you're using ColumnLayout
                  Can you illustrate what you want with images ?

                  A 2 Replies Last reply
                  0
                  • O Oussama Kh - IPeculiar

                    @Arkning
                    the anchors doesn't work because you're using ColumnLayout
                    Can you illustrate what you want with images ?

                    A Offline
                    A Offline
                    Arkning
                    wrote on last edited by
                    #10

                    @Oussama-Kh---IPeculiar 0_1493995657494_Capture d'écran de 2017-05-05 16-45-19.png
                    So I want my the height of my TableView is equal to the black rectangle

                    1 Reply Last reply
                    0
                    • O Oussama Kh - IPeculiar

                      @Arkning
                      the anchors doesn't work because you're using ColumnLayout
                      Can you illustrate what you want with images ?

                      A Offline
                      A Offline
                      Arkning
                      wrote on last edited by
                      #11

                      @Oussama-Kh---IPeculiar And I don't think that the anchors doesn't work because of the ColumnLayout see my code I almost only use anchors to set my position, for example the black rectangle is set with anchors

                      O 1 Reply Last reply
                      0
                      • A Arkning

                        @Oussama-Kh---IPeculiar And I don't think that the anchors doesn't work because of the ColumnLayout see my code I almost only use anchors to set my position, for example the black rectangle is set with anchors

                        O Offline
                        O Offline
                        Oussama Kh - IPeculiar
                        wrote on last edited by
                        #12

                        @Arkning
                        try this

                        Item {
                            RowLayout {
                                id: headControls
                        
                                height: 48
                                anchors.margins: 16
                                anchors.top: parent.top
                                anchors.left: parent.left
                                anchors.right: parent.right
                        
                                spacing: 8
                        
                                Text {
                                    id: typo
                        
                                    text: qsTr("Typologie")
                        
                                    font.pointSize: 20
                                    verticalAlignment: Text.AlignVCenter
                                    horizontalAlignment: Text.AlignHCenter
                                }
                        
                                ComboBox {
                                    id: cb
                                    Layout.fillWidth: true
                                    model: ["", "house 1", "house 2", "house 3", "house 4", "house 5"]
                                }
                        
                                Button {
                                    id: o_typo
                                    Layout.fillWidth: true
                                    text: "Gérer les typologies..."
                        
                                    onClicked: dialog.open()
                                }
                            }
                        
                            ColumnLayout {
                                id: mainview
                                anchors.top: headControls.bottom
                                anchors.left: parent.left
                                anchors.right: parent.right
                                anchors.bottom: parent.bottom
                                anchors.margins: 16
                        
                                spacing: 16
                        
                                Button {
                                    id: check
                                    Layout.fillWidth: true
                                    text: "Valider les typologies"
                                }
                        
                                TableView {
                                    id: view
                                    Layout.fillWidth: true
                                    Layout.fillHeight: true
                        
                                    TableViewColumn {
                                        width: view.width / 3
                        
                                        role: "name"
                                        title: qsTr("Equipment")
                        
                                        movable: false
                                        resizable: false
                                    }
                        
                                    TableViewColumn {
                                        width: view.width / 3
                        
                                        title: qsTr("Connecté")
                        
                                        movable: false
                                        resizable: false
                        
                                        role: "state"
                                        delegate: Rectangle {
                                            color: if (styleData.value === "OUI") {
                                                       "white"
                                                   } else {
                                                       "orange"
                                                   }
                        
                                            Text {
                                                text: styleData.value
                                            }
                                        }
                                    }
                        
                                    TableViewColumn {
                                        width: view.width / 3
                        
                                        role: "reference"
                                        title: qsTr("Reference")
                        
                                        movable: false
                                        resizable: false
                        
                                        delegate: ComboBox {
                                            anchors.fill: parent
                                            model: ["Reference", "Test", "N/A"]
                                        }
                                    }
                        
                                    model: ListModel {
                                        id: equipmentModel
                        
                                        ListElement {
                                            name: "sofa"
                                            state: "OUI"
                                        }
                                        ListElement {
                                            name: "TV"
                                            state: "NON"
                                        }
                                    }
                                }
                            }
                        }
                        
                        1 Reply Last reply
                        0
                        • A Offline
                          A Offline
                          Arkning
                          wrote on last edited by Arkning
                          #13

                          Thanks it's working !!! But now I have an other issue it's that I'm using a StackLayout and a TabBar, and when i copy paste the code inside my fisrt view it doesn't work but when it's in the second or third view it works and I don't know why.

                          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