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. Why can't the contentData property of the menu be used in initialization?
Qt 6.11 is out! See what's new in the release blog

Why can't the contentData property of the menu be used in initialization?

Scheduled Pinned Locked Moved Solved QML and Qt Quick
18 Posts 3 Posters 3.6k 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.
  • M mirro

    @jsulm Menuitem must have been added

    errors: QQmlExpression:Expression test.qml depends on non-NOTIFYable properties:QQuickMenu:contentData    
    Unbale to assign [undefined] to double
    
    jsulmJ Online
    jsulmJ Online
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #4

    @mirro said in Why can't the contentData property of the menu be used in initialization?:

    Menuitem must have been added

    No idea what you are doing and what you are trying to tell me...

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    1 Reply Last reply
    0
    • M mirro

      @jsulm Menuitem must have been added

      errors: QQmlExpression:Expression test.qml depends on non-NOTIFYable properties:QQuickMenu:contentData    
      Unbale to assign [undefined] to double
      
      J.HilkJ Offline
      J.HilkJ Offline
      J.Hilk
      Moderators
      wrote on last edited by
      #5

      @mirro well, there you have your answer, it is used during initialization, but the Menu height won't update when contentData changes. So you assign a constant to height that depending on implementation may be any number, who knows 🤷‍♂️

      Use a real property or a real(known) constant


      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


      Q: What's that?
      A: It's blue light.
      Q: What does it do?
      A: It turns blue.

      M 1 Reply Last reply
      1
      • J.HilkJ J.Hilk

        @mirro well, there you have your answer, it is used during initialization, but the Menu height won't update when contentData changes. So you assign a constant to height that depending on implementation may be any number, who knows 🤷‍♂️

        Use a real property or a real(known) constant

        M Offline
        M Offline
        mirro
        wrote on last edited by
        #6

        @J-Hilk I have individual question to consult next .
        How can I click a button to make the ListView switch between different views?

        J.HilkJ 1 Reply Last reply
        0
        • M mirro

          @J-Hilk I have individual question to consult next .
          How can I click a button to make the ListView switch between different views?

          J.HilkJ Offline
          J.HilkJ Offline
          J.Hilk
          Moderators
          wrote on last edited by
          #7

          @mirro you mean switch between different model? Switching between different views doesn't make too much sense

          import QtQuick 2.12
          import QtQuick.Window 2.0
          import QtQuick.Controls 2.12
          
          import Qt.labs.settings 1.0
          
          Window {
              id: window
          
              width: 300
              height: 300
          
              visible: true
          
              Button{
                  id:switchModel
          
          
                  height: 50
                  width: 300
          
                  text: "switch"
                  onClicked: {
                      if(lView.model == model1)
                          lView.model = model2
                      else
                          lView.model = model1
                  }
              }
          
              ListModel{
                  id:model1
                  ListElement{
                      content: "a"
                  }
          
                  ListElement{
                      content: "b"
                  }
                  ListElement{
                      content: "c"
                  }
              }
          
              ListModel{
                  id:model2
                  ListElement{
                      content: "1"
                  }
          
                  ListElement{
                      content: "2"
                  }
                  ListElement{
                      content: "3"
                  }
              }
          
              ListView{
                  id:lView
                  width: 300
                  height: 250
                  y:50
          
                  model: model1
                  delegate: Text{
                      text: content
                  }
              }
          }
          
          

          Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


          Q: What's that?
          A: It's blue light.
          Q: What does it do?
          A: It turns blue.

          M 1 Reply Last reply
          1
          • J.HilkJ J.Hilk

            @mirro you mean switch between different model? Switching between different views doesn't make too much sense

            import QtQuick 2.12
            import QtQuick.Window 2.0
            import QtQuick.Controls 2.12
            
            import Qt.labs.settings 1.0
            
            Window {
                id: window
            
                width: 300
                height: 300
            
                visible: true
            
                Button{
                    id:switchModel
            
            
                    height: 50
                    width: 300
            
                    text: "switch"
                    onClicked: {
                        if(lView.model == model1)
                            lView.model = model2
                        else
                            lView.model = model1
                    }
                }
            
                ListModel{
                    id:model1
                    ListElement{
                        content: "a"
                    }
            
                    ListElement{
                        content: "b"
                    }
                    ListElement{
                        content: "c"
                    }
                }
            
                ListModel{
                    id:model2
                    ListElement{
                        content: "1"
                    }
            
                    ListElement{
                        content: "2"
                    }
                    ListElement{
                        content: "3"
                    }
                }
            
                ListView{
                    id:lView
                    width: 300
                    height: 250
                    y:50
            
                    model: model1
                    delegate: Text{
                        text: content
                    }
                }
            }
            
            
            M Offline
            M Offline
            mirro
            wrote on last edited by mirro
            #8

            @J-Hilk sorry,I mean that clicking the mouse button triggers the listView to slide left or right effect.
            Does the ListView provide relevant signals or methods?

            J.HilkJ 1 Reply Last reply
            0
            • M mirro

              @J-Hilk sorry,I mean that clicking the mouse button triggers the listView to slide left or right effect.
              Does the ListView provide relevant signals or methods?

              J.HilkJ Offline
              J.HilkJ Offline
              J.Hilk
              Moderators
              wrote on last edited by
              #9

              @mirro nothing specific only stuff all QML items have like for example:

              import QtQuick 2.12
              import QtQuick.Window 2.0
              import QtQuick.Controls 2.12
              
              import Qt.labs.settings 1.0
              
              Window {
                  id: window
              
                  width: 300
                  height: 300
              
                  visible: true
              
                  Button{
                      id:switchModel
              
              
                      height: 50
                      width: 300
              
                      text: "switch"
                      onClicked: {
                          leftSide = !leftSide
                      }
                  }
              
                  property bool leftSide: true
              
                  ListView{
                      id:lView
                      width: parent.width / 2
                      height: 250
                      y:50
              
                      x: leftSide ? 0 : window.width - width
                      Behavior on x {
                          NumberAnimation{duration:500}
                      }
              
                      model: 20
                      delegate: Rectangle{
                          width: lView.width
                          height: 50
                          color: "green"
                          Text{
                              text: modelData
                          }
                      }
                  }
              }
              
              

              Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


              Q: What's that?
              A: It's blue light.
              Q: What does it do?
              A: It turns blue.

              M 1 Reply Last reply
              0
              • J.HilkJ J.Hilk

                @mirro nothing specific only stuff all QML items have like for example:

                import QtQuick 2.12
                import QtQuick.Window 2.0
                import QtQuick.Controls 2.12
                
                import Qt.labs.settings 1.0
                
                Window {
                    id: window
                
                    width: 300
                    height: 300
                
                    visible: true
                
                    Button{
                        id:switchModel
                
                
                        height: 50
                        width: 300
                
                        text: "switch"
                        onClicked: {
                            leftSide = !leftSide
                        }
                    }
                
                    property bool leftSide: true
                
                    ListView{
                        id:lView
                        width: parent.width / 2
                        height: 250
                        y:50
                
                        x: leftSide ? 0 : window.width - width
                        Behavior on x {
                            NumberAnimation{duration:500}
                        }
                
                        model: 20
                        delegate: Rectangle{
                            width: lView.width
                            height: 50
                            color: "green"
                            Text{
                                text: modelData
                            }
                        }
                    }
                }
                
                
                M Offline
                M Offline
                mirro
                wrote on last edited by
                #10

                @J-Hilk Thank you very much.One last question.
                Is menuItem.highlighted available in QT5.9.7? The test program has no effect.

                 Menu {
                        id: menu
                        widh:100
                        height:100
                        MenuItem {
                            id:menuItem 
                            width:100       
                            height:40         
                            text: "New..."   
                            background:Rectangle{
                                    color:menuItem.highlighted?'black':'red'
                             }
                        }
                    }
                
                J.HilkJ 1 Reply Last reply
                0
                • M mirro

                  @J-Hilk Thank you very much.One last question.
                  Is menuItem.highlighted available in QT5.9.7? The test program has no effect.

                   Menu {
                          id: menu
                          widh:100
                          height:100
                          MenuItem {
                              id:menuItem 
                              width:100       
                              height:40         
                              text: "New..."   
                              background:Rectangle{
                                      color:menuItem.highlighted?'black':'red'
                               }
                          }
                      }
                  
                  J.HilkJ Offline
                  J.HilkJ Offline
                  J.Hilk
                  Moderators
                  wrote on last edited by J.Hilk
                  #11

                  @mirro take a look at the documentation:
                  https://doc.qt.io/qt-5/qtquickcontrols2-customize.html#customizing-menu

                  for more information about that.

                  Since MenuItem inherits from Control, yes it has a background property since the very beginning :D, version independent
                  same for highlighted, its a thing since MenuItem was introduced in 5.7


                  Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                  Q: What's that?
                  A: It's blue light.
                  Q: What does it do?
                  A: It turns blue.

                  M 1 Reply Last reply
                  1
                  • J.HilkJ J.Hilk

                    @mirro take a look at the documentation:
                    https://doc.qt.io/qt-5/qtquickcontrols2-customize.html#customizing-menu

                    for more information about that.

                    Since MenuItem inherits from Control, yes it has a background property since the very beginning :D, version independent
                    same for highlighted, its a thing since MenuItem was introduced in 5.7

                    M Offline
                    M Offline
                    mirro
                    wrote on last edited by
                    #12

                    @J-Hilk

                    Well, I don't know, but menuItem.highlighted is also false when I set hoverEnable:true

                    Menu {
                            id: menu
                            widh:100
                            height:100
                            MenuItem {
                                id:menuItem 
                                hoverEnable:true
                                width:100       
                                height:40         
                                text: "New..."   
                                background:Rectangle{
                                        color:menuItem.highlighted?'black':'red'
                                 }
                            }
                        }
                    
                    J.HilkJ 1 Reply Last reply
                    0
                    • M mirro

                      @J-Hilk

                      Well, I don't know, but menuItem.highlighted is also false when I set hoverEnable:true

                      Menu {
                              id: menu
                              widh:100
                              height:100
                              MenuItem {
                                  id:menuItem 
                                  hoverEnable:true
                                  width:100       
                                  height:40         
                                  text: "New..."   
                                  background:Rectangle{
                                          color:menuItem.highlighted?'black':'red'
                                   }
                              }
                          }
                      
                      J.HilkJ Offline
                      J.HilkJ Offline
                      J.Hilk
                      Moderators
                      wrote on last edited by
                      #13

                      @mirro for once there are 2 typos in your code

                      widh:100 -> width:100
                      and
                      hoverEnable:true -> hoverEnabled:true


                      Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                      Q: What's that?
                      A: It's blue light.
                      Q: What does it do?
                      A: It turns blue.

                      M 1 Reply Last reply
                      2
                      • J.HilkJ J.Hilk

                        @mirro for once there are 2 typos in your code

                        widh:100 -> width:100
                        and
                        hoverEnable:true -> hoverEnabled:true

                        M Offline
                        M Offline
                        mirro
                        wrote on last edited by
                        #14

                        @J-Hilk
                        Sorry, my work machine has no network, so I can't copy the code correctly.
                        The program I tested had no syntax errors, but menuItem.highlighted was always false, I don't know why.

                        Menu {
                                id: menu
                                width:100
                                height:100
                                MenuItem {
                                    id:menuItem 
                                    hoverEnabled:true
                                    width:100       
                                    height:40         
                                    text: "New..."   
                                    background:Rectangle{
                                            color:menuItem.highlighted?'black':'red'
                                     }
                                }
                            }
                        
                        J.HilkJ 1 Reply Last reply
                        0
                        • M mirro

                          @J-Hilk
                          Sorry, my work machine has no network, so I can't copy the code correctly.
                          The program I tested had no syntax errors, but menuItem.highlighted was always false, I don't know why.

                          Menu {
                                  id: menu
                                  width:100
                                  height:100
                                  MenuItem {
                                      id:menuItem 
                                      hoverEnabled:true
                                      width:100       
                                      height:40         
                                      text: "New..."   
                                      background:Rectangle{
                                              color:menuItem.highlighted?'black':'red'
                                       }
                                  }
                              }
                          
                          J.HilkJ Offline
                          J.HilkJ Offline
                          J.Hilk
                          Moderators
                          wrote on last edited by J.Hilk
                          #15

                          @mirro works fine for me:

                          384367cd-d9a5-4371-809f-72f69f334d69-image.png

                          import QtQuick 2.12
                          import QtQuick.Controls 2.12
                          import QtQuick.Window 2.2
                          
                          ApplicationWindow {
                              visible: true
                              width: 640
                              height: 200
                              title: qsTr("Hello World")
                              id:root
                          
                              Component.onCompleted: menu.open()
                          
                              Menu{
                                  id:menu
                                  width: 640
                                  height: 100
                          
                                  MenuItem{
                                      id:menuItem2
                                      width: 100
                                      height: 40
                                      text:"New..."
                                      hoverEnabled:true
                                      background:Rectangle{
                                          implicitWidth: 100
                                          implicitHeight: 40
                                          color: menuItem2.highlighted ? "black" : "red"
                                      }
                          
                                  }
                                  MenuItem{
                                      id:menuItem1
                                      width: 100
                                      height: 40
                                      text:"Delete..."
                                      hoverEnabled:true
                                      background:Rectangle{
                                          implicitWidth: 100
                                          implicitHeight: 40
                                          color: menuItem1.highlighted ? "black" : "red"
                                      }
                                  }
                              }
                          }
                          
                          

                          but I'm on 5.12.6 🤷‍♂️ I do not have any other version installed


                          Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                          Q: What's that?
                          A: It's blue light.
                          Q: What does it do?
                          A: It turns blue.

                          M 1 Reply Last reply
                          0
                          • J.HilkJ J.Hilk

                            @mirro works fine for me:

                            384367cd-d9a5-4371-809f-72f69f334d69-image.png

                            import QtQuick 2.12
                            import QtQuick.Controls 2.12
                            import QtQuick.Window 2.2
                            
                            ApplicationWindow {
                                visible: true
                                width: 640
                                height: 200
                                title: qsTr("Hello World")
                                id:root
                            
                                Component.onCompleted: menu.open()
                            
                                Menu{
                                    id:menu
                                    width: 640
                                    height: 100
                            
                                    MenuItem{
                                        id:menuItem2
                                        width: 100
                                        height: 40
                                        text:"New..."
                                        hoverEnabled:true
                                        background:Rectangle{
                                            implicitWidth: 100
                                            implicitHeight: 40
                                            color: menuItem2.highlighted ? "black" : "red"
                                        }
                            
                                    }
                                    MenuItem{
                                        id:menuItem1
                                        width: 100
                                        height: 40
                                        text:"Delete..."
                                        hoverEnabled:true
                                        background:Rectangle{
                                            implicitWidth: 100
                                            implicitHeight: 40
                                            color: menuItem1.highlighted ? "black" : "red"
                                        }
                                    }
                                }
                            }
                            
                            

                            but I'm on 5.12.6 🤷‍♂️ I do not have any other version installed

                            M Offline
                            M Offline
                            mirro
                            wrote on last edited by
                            #16

                            @J-Hilk

                            highlighted attribute may be need to maintain yourself in QT5.9.7

                            J.HilkJ 1 Reply Last reply
                            0
                            • M mirro

                              @J-Hilk

                              highlighted attribute may be need to maintain yourself in QT5.9.7

                              J.HilkJ Offline
                              J.HilkJ Offline
                              J.Hilk
                              Moderators
                              wrote on last edited by
                              #17

                              @mirro have you tried my fully working example code?


                              Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                              Q: What's that?
                              A: It's blue light.
                              Q: What does it do?
                              A: It turns blue.

                              M 1 Reply Last reply
                              0
                              • J.HilkJ J.Hilk

                                @mirro have you tried my fully working example code?

                                M Offline
                                M Offline
                                mirro
                                wrote on last edited by mirro
                                #18

                                @J-Hilk

                                My working environment does not have Internet. I have tested it with similar code.
                                I maintaining this highlighted attribute in the background: Rectangle: MouseArea {} in Qt5.9.7 now.

                                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