Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. QML and Qt Quick
  4. Rectangle with onEditingFinished
Qt 6.12 LTS is out! See what's new in the release blog

Rectangle with onEditingFinished

Scheduled Pinned Locked Moved Solved QML and Qt Quick
19 Posts 2 Posters 5.4k Views 1 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.
  • DiracsbracketD Diracsbracket

    @gabor53 said in Rectangle with onEditingFinished:

    var msg = msg.Comp.createObject(parent, args)

    Must be

    var msg = msgComp.createObject(parent, args)
    

    Also, if a component is to be reusable, it is usually better to use parent properties to determine its size/anchoring rather than to hard-code some element's id.

    Rectangle {
        id: notificationSquare
       ...
        anchors.top: parent.bottom //<- should work if parent does not have clip: true? //addName.bottom
        anchors.left: parent.left //addName.left
    }
    

    As mentioned in the comments above, anchoring the top of a child to the bottom property of its parent works if the parent's clip property is false (which is the default). If clip is set to true the child will not be visible with the above anchoring.

    color: transparent

    Did that not generate an error in your Application Output window?
    There is no color transparent -> should be "transparent" between quotes.

    G Offline
    G Offline
    gabor53
    wrote on last edited by
    #9

    @Diracsbracket
    There was no error message at all.

    DiracsbracketD 1 Reply Last reply
    0
    • G gabor53

      @Diracsbracket
      There was no error message at all.

      DiracsbracketD Offline
      DiracsbracketD Offline
      Diracsbracket
      wrote on last edited by Diracsbracket
      #10

      @gabor53 said in Rectangle with onEditingFinished:

      There was no error message at all.

      There was no error message at all in the Application output view when you tried to run it?

      0_1534337251947_85506d0d-8883-4dd3-a1c9-7ee44247eb11-image.png

      0_1534337524174_41b7e27d-ad9f-436c-bb26-0954207c934c-image.png

      If those errors really are not reported, then you really should solve that problem first and find out why, but I suspect you may only have been looking at the Compile Output view or so.

      G 1 Reply Last reply
      0
      • DiracsbracketD Diracsbracket

        @gabor53 said in Rectangle with onEditingFinished:

        There was no error message at all.

        There was no error message at all in the Application output view when you tried to run it?

        0_1534337251947_85506d0d-8883-4dd3-a1c9-7ee44247eb11-image.png

        0_1534337524174_41b7e27d-ad9f-436c-bb26-0954207c934c-image.png

        If those errors really are not reported, then you really should solve that problem first and find out why, but I suspect you may only have been looking at the Compile Output view or so.

        G Offline
        G Offline
        gabor53
        wrote on last edited by
        #11

        Hi @Diracsbracket ,
        I fixed everything you highlighted and you are right, I focused on the compile output. In spite of the corrections it still doesn't display the rectangle and the text. Here are my changes:

            var msgComp = Qt.createComponent("Messages.qml")
            var msg = msgComp.createObject(parent, args)
        
               onEditingFinished: {
                        if (addName.text === "") {
                            var popup = Js.createMsg(add1, {
                                                         text: "Enter the Friend's name."
                                                     })
        
        Rectangle {
            id: notificationSquare
            height: dp(30)
            anchors.top: parent.bottom
            anchors.left: parent.left
            anchors.topMargin: 20
            color: "transparent"
        

        It seems correct but it is not working. Thank you for your help.

        DiracsbracketD 1 Reply Last reply
        0
        • G gabor53

          Hi @Diracsbracket ,
          I fixed everything you highlighted and you are right, I focused on the compile output. In spite of the corrections it still doesn't display the rectangle and the text. Here are my changes:

              var msgComp = Qt.createComponent("Messages.qml")
              var msg = msgComp.createObject(parent, args)
          
                 onEditingFinished: {
                          if (addName.text === "") {
                              var popup = Js.createMsg(add1, {
                                                           text: "Enter the Friend's name."
                                                       })
          
          Rectangle {
              id: notificationSquare
              height: dp(30)
              anchors.top: parent.bottom
              anchors.left: parent.left
              anchors.topMargin: 20
              color: "transparent"
          

          It seems correct but it is not working. Thank you for your help.

          DiracsbracketD Offline
          DiracsbracketD Offline
          Diracsbracket
          wrote on last edited by Diracsbracket
          #12

          @gabor53
          I think it's best if you try the following minimal test program, run it and compare it with what you have:

          main.qml:

          import QtQuick 2.11
          import QtQuick.Window 2.11
          import QtQuick.Controls 2.4
          
          import "code.js" as Js
          
          ApplicationWindow {
              id: window
              visible: true
              width: 640
              height: 480
              title: qsTr("Hello World")
          
          Rectangle {
                  id: root
                  color: "lightblue"
                  anchors.fill: parent
                  focus: false
          
                  Text {
                      id: id
                      text: "ID:"
                      x: 30
                      y: 30
                      font.pointSize: 16
                      focus: false
                  }
          
                  TextField {
                      id: addName
                      anchors.top: id.bottom
                      x: 30
                      anchors.margins: 30
                      maximumLength: 85
                      placeholderText: "Add Name"
                      focus: true
          
                      property Message msg
          
                      onLengthChanged: {
                          if (msg && length>0)
                              msg.destroy()
                      }
          
                      onEditingFinished: {
                          if (length === 0)
                              msg = Js.createMsg(addName, {"text": "Enter the Friend's name."})
                          else
                          {
                              focus = false
                              console.debug("OK")
                          }
                      }
                  }
              }
          

          code.js

          function createMsg(parent, args) {
              var msgComp = Qt.createComponent("Message.qml")
              var msg = msgComp.createObject(parent, args)
              return msg
          }
          
          G DiracsbracketD 2 Replies Last reply
          0
          • DiracsbracketD Diracsbracket

            @gabor53
            I think it's best if you try the following minimal test program, run it and compare it with what you have:

            main.qml:

            import QtQuick 2.11
            import QtQuick.Window 2.11
            import QtQuick.Controls 2.4
            
            import "code.js" as Js
            
            ApplicationWindow {
                id: window
                visible: true
                width: 640
                height: 480
                title: qsTr("Hello World")
            
            Rectangle {
                    id: root
                    color: "lightblue"
                    anchors.fill: parent
                    focus: false
            
                    Text {
                        id: id
                        text: "ID:"
                        x: 30
                        y: 30
                        font.pointSize: 16
                        focus: false
                    }
            
                    TextField {
                        id: addName
                        anchors.top: id.bottom
                        x: 30
                        anchors.margins: 30
                        maximumLength: 85
                        placeholderText: "Add Name"
                        focus: true
            
                        property Message msg
            
                        onLengthChanged: {
                            if (msg && length>0)
                                msg.destroy()
                        }
            
                        onEditingFinished: {
                            if (length === 0)
                                msg = Js.createMsg(addName, {"text": "Enter the Friend's name."})
                            else
                            {
                                focus = false
                                console.debug("OK")
                            }
                        }
                    }
                }
            

            code.js

            function createMsg(parent, args) {
                var msgComp = Qt.createComponent("Message.qml")
                var msg = msgComp.createObject(parent, args)
                return msg
            }
            
            G Offline
            G Offline
            gabor53
            wrote on last edited by
            #13

            @Diracsbracket
            Sorry for the late response. I needed to buy a new computer and I am still setting it up.

            DiracsbracketD 1 Reply Last reply
            0
            • G gabor53

              @Diracsbracket
              Sorry for the late response. I needed to buy a new computer and I am still setting it up.

              DiracsbracketD Offline
              DiracsbracketD Offline
              Diracsbracket
              wrote on last edited by
              #14

              @gabor53 said in Rectangle with onEditingFinished:

              I needed to buy a new computer and I am still setting it up.

              I went through the same routine not so very long ago. Good luck!

              G 1 Reply Last reply
              0
              • DiracsbracketD Diracsbracket

                @gabor53 said in Rectangle with onEditingFinished:

                I needed to buy a new computer and I am still setting it up.

                I went through the same routine not so very long ago. Good luck!

                G Offline
                G Offline
                gabor53
                wrote on last edited by
                #15

                @Diracsbracket
                Thank you. Now it seems to be working (both the new computer and the program).
                I ended up with another issue:
                To make Messages reusable I changed the anchoring from addName to parent. But addName is a child of addFriend1 so it is not aligned with addName. How can I tell the Rectangle from Messages in addFriend1 that the parent now is addName?
                Thank you.

                1 Reply Last reply
                0
                • DiracsbracketD Diracsbracket

                  @gabor53
                  I think it's best if you try the following minimal test program, run it and compare it with what you have:

                  main.qml:

                  import QtQuick 2.11
                  import QtQuick.Window 2.11
                  import QtQuick.Controls 2.4
                  
                  import "code.js" as Js
                  
                  ApplicationWindow {
                      id: window
                      visible: true
                      width: 640
                      height: 480
                      title: qsTr("Hello World")
                  
                  Rectangle {
                          id: root
                          color: "lightblue"
                          anchors.fill: parent
                          focus: false
                  
                          Text {
                              id: id
                              text: "ID:"
                              x: 30
                              y: 30
                              font.pointSize: 16
                              focus: false
                          }
                  
                          TextField {
                              id: addName
                              anchors.top: id.bottom
                              x: 30
                              anchors.margins: 30
                              maximumLength: 85
                              placeholderText: "Add Name"
                              focus: true
                  
                              property Message msg
                  
                              onLengthChanged: {
                                  if (msg && length>0)
                                      msg.destroy()
                              }
                  
                              onEditingFinished: {
                                  if (length === 0)
                                      msg = Js.createMsg(addName, {"text": "Enter the Friend's name."})
                                  else
                                  {
                                      focus = false
                                      console.debug("OK")
                                  }
                              }
                          }
                      }
                  

                  code.js

                  function createMsg(parent, args) {
                      var msgComp = Qt.createComponent("Message.qml")
                      var msg = msgComp.createObject(parent, args)
                      return msg
                  }
                  
                  DiracsbracketD Offline
                  DiracsbracketD Offline
                  Diracsbracket
                  wrote on last edited by Diracsbracket
                  #16

                  @gabor53
                  Don't you pass the desired parent object at object creation time? Like this:

                  function createMsg(parent, args) {
                      var msgComp = Qt.createComponent("Message.qml")
                      var msg = msgComp.createObject(parent, args)
                      return msg
                  }
                  
                  G 1 Reply Last reply
                  0
                  • DiracsbracketD Diracsbracket

                    @gabor53
                    Don't you pass the desired parent object at object creation time? Like this:

                    function createMsg(parent, args) {
                        var msgComp = Qt.createComponent("Message.qml")
                        var msg = msgComp.createObject(parent, args)
                        return msg
                    }
                    
                    G Offline
                    G Offline
                    gabor53
                    wrote on last edited by
                    #17

                    @Diracsbracket
                    I do. And the rectangle and the text is in the the top left corner.

                    DiracsbracketD 1 Reply Last reply
                    0
                    • G gabor53

                      @Diracsbracket
                      I do. And the rectangle and the text is in the the top left corner.

                      DiracsbracketD Offline
                      DiracsbracketD Offline
                      Diracsbracket
                      wrote on last edited by Diracsbracket
                      #18

                      @gabor53
                      Show your result and your anchoring. They must be wrong.

                      Using the test code as above (with a slight modification to destroy the message) I get this:

                       Rectangle {
                              id: root
                              color: "lightblue"
                              anchors.fill: parent
                              focus: false
                      
                              Text {
                                  id: id
                                  text: "ID:"
                                  x: 30
                                  y: 30
                                  font.pointSize: 16
                                  focus: false
                              }
                      
                              TextField {
                                  id: addName
                                  anchors.top: id.bottom
                                  x: 30
                                  anchors.margins: 30
                                  maximumLength: 85
                                  placeholderText: "Add Name"
                                  focus: true
                                  //validator: RegExpValidator {regExp: /^[a-zA-Z ]{2,30}$/}
                      
                                  property Message msg
                      
                                  onLengthChanged: {
                                      if (msg && length>0)
                                          msg.destroy()
                                  }
                      
                                  onEditingFinished: {
                                      if (length === 0)
                                          msg = Js.createMsg(addName, {"text": "Enter the Friend's name."})
                                      else
                                      {
                                          focus = false
                                          console.debug("OK")
                                      }
                                  }
                              }
                          }
                      

                      0_1535294982329_b75c0c5d-2344-4af8-8085-9ee1ddc69c49-image.png

                      where Messages.qml is

                      import QtQuick 2.11
                      
                      Rectangle {
                          id: notificationSquare
                          height: 30
                          anchors.top: parent.bottom
                          anchors.left: parent.left
                          anchors.topMargin: 20
                          color: "transparent"
                          width: 250
                          border.color: "#ff0000"
                          border.width: 2
                          property alias text: msg.text
                      
                          function destroy() {
                              this.destroy()
                          }
                      
                          Text {
                              id: msg
                              font.bold: true
                              horizontalAlignment: Text.AlignHCenter
                              color: "red"
                              font.pointSize: 12
                              anchors.fill: parent
                              anchors.horizontalCenter: parent.horizontalCenter
                              anchors.verticalCenter: parent.verticalCenter
                          }
                      }
                      
                      G 1 Reply Last reply
                      1
                      • DiracsbracketD Diracsbracket

                        @gabor53
                        Show your result and your anchoring. They must be wrong.

                        Using the test code as above (with a slight modification to destroy the message) I get this:

                         Rectangle {
                                id: root
                                color: "lightblue"
                                anchors.fill: parent
                                focus: false
                        
                                Text {
                                    id: id
                                    text: "ID:"
                                    x: 30
                                    y: 30
                                    font.pointSize: 16
                                    focus: false
                                }
                        
                                TextField {
                                    id: addName
                                    anchors.top: id.bottom
                                    x: 30
                                    anchors.margins: 30
                                    maximumLength: 85
                                    placeholderText: "Add Name"
                                    focus: true
                                    //validator: RegExpValidator {regExp: /^[a-zA-Z ]{2,30}$/}
                        
                                    property Message msg
                        
                                    onLengthChanged: {
                                        if (msg && length>0)
                                            msg.destroy()
                                    }
                        
                                    onEditingFinished: {
                                        if (length === 0)
                                            msg = Js.createMsg(addName, {"text": "Enter the Friend's name."})
                                        else
                                        {
                                            focus = false
                                            console.debug("OK")
                                        }
                                    }
                                }
                            }
                        

                        0_1535294982329_b75c0c5d-2344-4af8-8085-9ee1ddc69c49-image.png

                        where Messages.qml is

                        import QtQuick 2.11
                        
                        Rectangle {
                            id: notificationSquare
                            height: 30
                            anchors.top: parent.bottom
                            anchors.left: parent.left
                            anchors.topMargin: 20
                            color: "transparent"
                            width: 250
                            border.color: "#ff0000"
                            border.width: 2
                            property alias text: msg.text
                        
                            function destroy() {
                                this.destroy()
                            }
                        
                            Text {
                                id: msg
                                font.bold: true
                                horizontalAlignment: Text.AlignHCenter
                                color: "red"
                                font.pointSize: 12
                                anchors.fill: parent
                                anchors.horizontalCenter: parent.horizontalCenter
                                anchors.verticalCenter: parent.verticalCenter
                            }
                        }
                        
                        G Offline
                        G Offline
                        gabor53
                        wrote on last edited by
                        #19

                        @Diracsbracket
                        I figured out what I did incorrectly. Somehow I deleted the root rectangle.
                        Thank you for your detailed explanations. I learnt a lot.

                        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
                        • Unsolved