Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QML onClicked no activity
QtWS25 Last Chance

QML onClicked no activity

Scheduled Pinned Locked Moved Unsolved General and Desktop
12 Posts 2 Posters 610 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.
  • SPlattenS Offline
    SPlattenS Offline
    SPlatten
    wrote on last edited by
    #1

    I have a QML section:

                Image{
                    id: iconLocal
                    anchors.right: parent.right //put this on the right side
                    source: "images/fake assets/arrow_right_green.png"
                    width: 64; height: 64
                    opacity: 0.7
    
                    MouseArea {
                        anchors.fill: parent
                        hoverEnabled: true
                        acceptedButtons: Qt.LeftButton
    
                        onClicked: {
    console.info("A here!");
                            //connectionSelector.ipChosen("localhost", d.keyString);
    console.info("B here!");
                        }
                        onEntered: iconLocal.opacity = 1.0
                        onExited: iconLocal.opacity = 0.7
                    }
    

    The image is placed in the correct location. I can see that when the mouse is moved onto the image and out the onEntered and onExited sections are working, but I get no clicked event. I've tried setting a breakpoint in the onClicked handler and I never see either the console messages or any activity on the breakpoint.

    I've also tried:

                Image{
                    id: iconLocal
                    anchors.right: parent.right //put this on the right side
                    source: "images/fake assets/arrow_right_green.png"
                    width: 64; height: 64
                    opacity: 0.7
                }
                MouseArea {
                    anchors.fill: parent
                    hoverEnabled: true
                    acceptedButtons: Qt.LeftButton
    
                    onClicked: {
    console.info("A here!");
                        //connectionSelector.ipChosen("localhost", d.keyString);
    console.info("B here!");
                    }
                    onEntered: iconLocal.opacity = 1.0
                    onExited: iconLocal.opacity = 0.7
                }
    

    What could be wrong?

    Kind Regards,
    Sy

    J.HilkJ 1 Reply Last reply
    0
    • SPlattenS SPlatten

      I have a QML section:

                  Image{
                      id: iconLocal
                      anchors.right: parent.right //put this on the right side
                      source: "images/fake assets/arrow_right_green.png"
                      width: 64; height: 64
                      opacity: 0.7
      
                      MouseArea {
                          anchors.fill: parent
                          hoverEnabled: true
                          acceptedButtons: Qt.LeftButton
      
                          onClicked: {
      console.info("A here!");
                              //connectionSelector.ipChosen("localhost", d.keyString);
      console.info("B here!");
                          }
                          onEntered: iconLocal.opacity = 1.0
                          onExited: iconLocal.opacity = 0.7
                      }
      

      The image is placed in the correct location. I can see that when the mouse is moved onto the image and out the onEntered and onExited sections are working, but I get no clicked event. I've tried setting a breakpoint in the onClicked handler and I never see either the console messages or any activity on the breakpoint.

      I've also tried:

                  Image{
                      id: iconLocal
                      anchors.right: parent.right //put this on the right side
                      source: "images/fake assets/arrow_right_green.png"
                      width: 64; height: 64
                      opacity: 0.7
                  }
                  MouseArea {
                      anchors.fill: parent
                      hoverEnabled: true
                      acceptedButtons: Qt.LeftButton
      
                      onClicked: {
      console.info("A here!");
                          //connectionSelector.ipChosen("localhost", d.keyString);
      console.info("B here!");
                      }
                      onEntered: iconLocal.opacity = 1.0
                      onExited: iconLocal.opacity = 0.7
                  }
      

      What could be wrong?

      J.HilkJ Online
      J.HilkJ Online
      J.Hilk
      Moderators
      wrote on last edited by
      #2

      @SPlatten
      works perfectly fine in this small example (5.12.6, macOS)

      import QtQuick 2.12
      import QtQuick.Window 2.0
      import QtQuick.Controls 2.12
      
      import Qt.labs.settings 1.0
      
      Window {
          id: window
      
          width: 120
          height: 60
      
          visible: true
      
          Item {
              anchors.fill: parent
              focus: true
      
              Image{
                              id: iconLocal
                              anchors.right: parent.right //put this on the right side
                              source: "https://apod.nasa.gov/apod/image/1907/SpotlessSunIss_Colacurcio_960.jpg"
                              width: 64; height: 64
                              opacity: 0.7
                          }
                          MouseArea {
                              anchors.fill: parent
                              hoverEnabled: true
                              acceptedButtons: Qt.LeftButton
      
                              onClicked: {
              console.info("A here!");
                                  //connectionSelector.ipChosen("localhost", d.keyString);
              console.info("B here!");
                              }
                              onEntered: iconLocal.opacity = 1.0
                              onExited: iconLocal.opacity = 0.7
                          }
          }
      }
      
      

      seems like its the surrounding code. Can you show more?


      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.

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

        @SPlatten
        works perfectly fine in this small example (5.12.6, macOS)

        import QtQuick 2.12
        import QtQuick.Window 2.0
        import QtQuick.Controls 2.12
        
        import Qt.labs.settings 1.0
        
        Window {
            id: window
        
            width: 120
            height: 60
        
            visible: true
        
            Item {
                anchors.fill: parent
                focus: true
        
                Image{
                                id: iconLocal
                                anchors.right: parent.right //put this on the right side
                                source: "https://apod.nasa.gov/apod/image/1907/SpotlessSunIss_Colacurcio_960.jpg"
                                width: 64; height: 64
                                opacity: 0.7
                            }
                            MouseArea {
                                anchors.fill: parent
                                hoverEnabled: true
                                acceptedButtons: Qt.LeftButton
        
                                onClicked: {
                console.info("A here!");
                                    //connectionSelector.ipChosen("localhost", d.keyString);
                console.info("B here!");
                                }
                                onEntered: iconLocal.opacity = 1.0
                                onExited: iconLocal.opacity = 0.7
                            }
            }
        }
        
        

        seems like its the surrounding code. Can you show more?

        SPlattenS Offline
        SPlattenS Offline
        SPlatten
        wrote on last edited by SPlatten
        #3

        @J-Hilk thank you, this is the entire QML file, there are other references, if you need to see just ask:

        ////////////////////////////////////////////////////////////////////
        // ConnectionSelector.qml
        // Allows user to specify connecting to localhost or to a
        // manually entered ip address. This is not normally shown
        // as mostly the UI will be run using the auto-connect option
        // by specifying the IP at the command line.
        //
        // Note that unlike every other screen, this is more likely to
        // be mouse-driven than touch-driven.
        //
        import QtQuick 2.6
        import "Utils.js" as Utils
        
        Rectangle {
            id: connectionSelector
        
            //"private" variables
            QtObject {
                id:d
                property string ipString: ""
                property string keyString: ""
                property color textColour: "#ffffff"
                property string lastIpAddress: ""
            }
        
            Component.onCompleted: {
                initialiseIPandKey()
            }
        
            //loads previously-saved ip/key information from the database
            function initialiseIPandKey(){
                Utils.initialiseStorage("UI");
                var lastIpAddress = Utils.setting("lastIpAddress");
                var lastAccessKey = Utils.setting("lastAccessKey");
                if (lastIpAddress === undefined) {
                    Utils.setSetting("lastIpAddress", "192.168.10.254");
                }
                if (lastAccessKey === undefined) {
                    Utils.setSetting("lastAccessKey", "1.2.3.4");
                }
                lastIpAddress = Utils.setting("lastIpAddress");
                lastAccessKey = Utils.setting("lastAccessKey");
        
                d.lastIpAddress = lastIpAddress
                d.keyString = lastAccessKey
            }
        
            //save the ip for later so it's known when we reload
            function saveCustomIp(ip) {
                Utils.setSetting("lastIpAddress", ip)
            }
        
            //actually makes the connection happen by calling into the connection manager
            function ipChosen(ip, keyString) {
                connectionManagerModel.setConnectionAttributes(ip, keyString)
                connectionManagerModel.initialiseConnection()
            }
        
            //static background image
            Image {
                anchors.fill: parent
                id: backgroundImage
                source: "images/STARTUP_SHUTDOWN/startup_background.jpg"
            }
        
        
            //displays connection-state-appropriate text (see state machine for content)
            Text {
                id: licenceText
                anchors { top: parent.top; left: parent.left; leftMargin: 10; topMargin: 10 }
                font.pointSize: 10
                color:  userAccessModel.licenceExpired ? Utils.expiredLicenceColour() : Utils.splashScreenTextColor()
                text: (userAccessModel.isAuthenticated || userAccessModel.licenceExpired)
                        ? "Licenced to " +userAccessModel.authenticatedUser + ". Expires: " + userAccessModel.licenceExpiryDate
                        : "Not licenced for remote connections"
            }
        
            //two rows of connection options
            //localhost
            //manually entered address
            Column {
                anchors { bottom: parent.bottom; bottomMargin: 20 }
                spacing: 20
                width: 600 //allow plenty of room for the manually entered address
        
                //first row, localhost selection
                Rectangle {
                    id: localHostOption
        
                    height: 64; width:parent.width
                    color: "transparent"
        
                    Text{
                        id:localhostText
                        color: d.textColour
                        height:parent.height
                        verticalAlignment: Text.AlignVCenter
                        //: Button caption. Clicking it means the user is saying "make a network connection to the server that is running on the machine I am using".
                        text: qsTranslate("Startup", "Connect to local machine")
                        anchors.left: parent.left //put this on the left side
                        anchors.leftMargin: 5
                        font.pointSize: 14
                    }
                    Image{
                        id: iconLocal
                        anchors.right: parent.right //put this on the right side
                        source: "images/fake assets/arrow_right_green.png"
                        width: 64; height: 64
                        opacity: 0.7
                    }
                    MouseArea {
                        anchors.fill: parent
                        hoverEnabled: true
                        acceptedButtons: Qt.LeftButton
        
                        onClicked: {
                            connectionSelector.ipChosen("localhost", d.keyString);
                        }
                        onEntered: iconLocal.opacity = 1.0
                        onExited: iconLocal.opacity = 0.7
                    }
                }
        
                //second row, manually-specified ip
                Rectangle {
                    id: customIPOption
                    property string ip: input.text
                    visible: userAccessModel.isAuthenticated
                    height:64; width: parent.width
                    color: "transparent"
        
                    Text{
                        id:addressLabel
                        height:parent.height
                        verticalAlignment: Text.AlignVCenter
                        anchors.left: parent.left
                        color: d.textColour
                        //: Button caption. Clicking it means the user is saying "make a network connection to a server running on another machine"
                        text: qsTranslate("Startup", "Connect to remote machine:")
                        font.pointSize: 14
                        anchors.leftMargin: 5
                    }
                    TextInput{
                        id: input
                        anchors.right: iconCustom.left
                        anchors.left: addressLabel.right
        
                        //couldn't get it to vertically align nicely.
                        //fixing the height achieves the same effect.
                        anchors.verticalCenter: addressLabel.verticalCenter
                        height: 23
        
                        color: d.textColour
                        font.pointSize: 14
                        font.italic: true
                        selectByMouse: true
        
                        //initially load the last-used-address
                        text: d.lastIpAddress
        
                        Keys.onPressed:{ //allow user to type ip and hit enter instead of clicking button
                            if( connectionSelector.opacity > 0.0 ){
                                if( event.key === Qt.Key_Return || event.key === Qt.Key_Enter ){
                                    saveCustomIp(customIPOption.ip)
                                    connectionSelector.ipChosen(customIPOption.ip, d.keyString)
                                }
                            }
                        }
                    }
                    Image{
                        id: iconCustom
                        anchors.right: parent.right
                        source: "images/fake assets/arrow_right_green.png"
                        width: 64; height: 64
                        opacity: 0.7
                        MouseArea {
                            anchors.fill: parent
                            hoverEnabled: true
                            acceptedButtons: Qt.LeftButton
                            onClicked: {
                                saveCustomIp(customIPOption.ip)
                                connectionSelector.ipChosen(customIPOption.ip, d.keyString)
                            }
                            onEntered: { iconCustom.opacity = 1.0; }
                            onExited: { iconCustom.opacity = 0.7; }
                        }
                    }
                }
            }
        }
        

        As I say the onEntered and onExited work fine, just the clicked thats not working. I should stated:

        Qt Creator 4.2.1, Based on Qt 5.8.0 MSVC 2015, 32 bit

        Kind Regards,
        Sy

        J.HilkJ 1 Reply Last reply
        0
        • SPlattenS SPlatten

          @J-Hilk thank you, this is the entire QML file, there are other references, if you need to see just ask:

          ////////////////////////////////////////////////////////////////////
          // ConnectionSelector.qml
          // Allows user to specify connecting to localhost or to a
          // manually entered ip address. This is not normally shown
          // as mostly the UI will be run using the auto-connect option
          // by specifying the IP at the command line.
          //
          // Note that unlike every other screen, this is more likely to
          // be mouse-driven than touch-driven.
          //
          import QtQuick 2.6
          import "Utils.js" as Utils
          
          Rectangle {
              id: connectionSelector
          
              //"private" variables
              QtObject {
                  id:d
                  property string ipString: ""
                  property string keyString: ""
                  property color textColour: "#ffffff"
                  property string lastIpAddress: ""
              }
          
              Component.onCompleted: {
                  initialiseIPandKey()
              }
          
              //loads previously-saved ip/key information from the database
              function initialiseIPandKey(){
                  Utils.initialiseStorage("UI");
                  var lastIpAddress = Utils.setting("lastIpAddress");
                  var lastAccessKey = Utils.setting("lastAccessKey");
                  if (lastIpAddress === undefined) {
                      Utils.setSetting("lastIpAddress", "192.168.10.254");
                  }
                  if (lastAccessKey === undefined) {
                      Utils.setSetting("lastAccessKey", "1.2.3.4");
                  }
                  lastIpAddress = Utils.setting("lastIpAddress");
                  lastAccessKey = Utils.setting("lastAccessKey");
          
                  d.lastIpAddress = lastIpAddress
                  d.keyString = lastAccessKey
              }
          
              //save the ip for later so it's known when we reload
              function saveCustomIp(ip) {
                  Utils.setSetting("lastIpAddress", ip)
              }
          
              //actually makes the connection happen by calling into the connection manager
              function ipChosen(ip, keyString) {
                  connectionManagerModel.setConnectionAttributes(ip, keyString)
                  connectionManagerModel.initialiseConnection()
              }
          
              //static background image
              Image {
                  anchors.fill: parent
                  id: backgroundImage
                  source: "images/STARTUP_SHUTDOWN/startup_background.jpg"
              }
          
          
              //displays connection-state-appropriate text (see state machine for content)
              Text {
                  id: licenceText
                  anchors { top: parent.top; left: parent.left; leftMargin: 10; topMargin: 10 }
                  font.pointSize: 10
                  color:  userAccessModel.licenceExpired ? Utils.expiredLicenceColour() : Utils.splashScreenTextColor()
                  text: (userAccessModel.isAuthenticated || userAccessModel.licenceExpired)
                          ? "Licenced to " +userAccessModel.authenticatedUser + ". Expires: " + userAccessModel.licenceExpiryDate
                          : "Not licenced for remote connections"
              }
          
              //two rows of connection options
              //localhost
              //manually entered address
              Column {
                  anchors { bottom: parent.bottom; bottomMargin: 20 }
                  spacing: 20
                  width: 600 //allow plenty of room for the manually entered address
          
                  //first row, localhost selection
                  Rectangle {
                      id: localHostOption
          
                      height: 64; width:parent.width
                      color: "transparent"
          
                      Text{
                          id:localhostText
                          color: d.textColour
                          height:parent.height
                          verticalAlignment: Text.AlignVCenter
                          //: Button caption. Clicking it means the user is saying "make a network connection to the server that is running on the machine I am using".
                          text: qsTranslate("Startup", "Connect to local machine")
                          anchors.left: parent.left //put this on the left side
                          anchors.leftMargin: 5
                          font.pointSize: 14
                      }
                      Image{
                          id: iconLocal
                          anchors.right: parent.right //put this on the right side
                          source: "images/fake assets/arrow_right_green.png"
                          width: 64; height: 64
                          opacity: 0.7
                      }
                      MouseArea {
                          anchors.fill: parent
                          hoverEnabled: true
                          acceptedButtons: Qt.LeftButton
          
                          onClicked: {
                              connectionSelector.ipChosen("localhost", d.keyString);
                          }
                          onEntered: iconLocal.opacity = 1.0
                          onExited: iconLocal.opacity = 0.7
                      }
                  }
          
                  //second row, manually-specified ip
                  Rectangle {
                      id: customIPOption
                      property string ip: input.text
                      visible: userAccessModel.isAuthenticated
                      height:64; width: parent.width
                      color: "transparent"
          
                      Text{
                          id:addressLabel
                          height:parent.height
                          verticalAlignment: Text.AlignVCenter
                          anchors.left: parent.left
                          color: d.textColour
                          //: Button caption. Clicking it means the user is saying "make a network connection to a server running on another machine"
                          text: qsTranslate("Startup", "Connect to remote machine:")
                          font.pointSize: 14
                          anchors.leftMargin: 5
                      }
                      TextInput{
                          id: input
                          anchors.right: iconCustom.left
                          anchors.left: addressLabel.right
          
                          //couldn't get it to vertically align nicely.
                          //fixing the height achieves the same effect.
                          anchors.verticalCenter: addressLabel.verticalCenter
                          height: 23
          
                          color: d.textColour
                          font.pointSize: 14
                          font.italic: true
                          selectByMouse: true
          
                          //initially load the last-used-address
                          text: d.lastIpAddress
          
                          Keys.onPressed:{ //allow user to type ip and hit enter instead of clicking button
                              if( connectionSelector.opacity > 0.0 ){
                                  if( event.key === Qt.Key_Return || event.key === Qt.Key_Enter ){
                                      saveCustomIp(customIPOption.ip)
                                      connectionSelector.ipChosen(customIPOption.ip, d.keyString)
                                  }
                              }
                          }
                      }
                      Image{
                          id: iconCustom
                          anchors.right: parent.right
                          source: "images/fake assets/arrow_right_green.png"
                          width: 64; height: 64
                          opacity: 0.7
                          MouseArea {
                              anchors.fill: parent
                              hoverEnabled: true
                              acceptedButtons: Qt.LeftButton
                              onClicked: {
                                  saveCustomIp(customIPOption.ip)
                                  connectionSelector.ipChosen(customIPOption.ip, d.keyString)
                              }
                              onEntered: { iconCustom.opacity = 1.0; }
                              onExited: { iconCustom.opacity = 0.7; }
                          }
                      }
                  }
              }
          }
          

          As I say the onEntered and onExited work fine, just the clicked thats not working. I should stated:

          Qt Creator 4.2.1, Based on Qt 5.8.0 MSVC 2015, 32 bit

          J.HilkJ Online
          J.HilkJ Online
          J.Hilk
          Moderators
          wrote on last edited by
          #4

          @SPlatten well, I can't see what could be the problem 🤔

          you can try removing the acceptedButtons property ( the default is already LeftButton) and try listening to onPressed: and onReleased, see if those come through


          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.

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

            @SPlatten well, I can't see what could be the problem 🤔

            you can try removing the acceptedButtons property ( the default is already LeftButton) and try listening to onPressed: and onReleased, see if those come through

            SPlattenS Offline
            SPlattenS Offline
            SPlatten
            wrote on last edited by
            #5

            @J-Hilk , I just tried exactly that, commented out acceptButtons and added handlers for onPressed and onReleased, nothing, however the onEntered and onExited do still work.

            Kind Regards,
            Sy

            J.HilkJ 1 Reply Last reply
            0
            • SPlattenS SPlatten

              @J-Hilk , I just tried exactly that, commented out acceptButtons and added handlers for onPressed and onReleased, nothing, however the onEntered and onExited do still work.

              J.HilkJ Online
              J.HilkJ Online
              J.Hilk
              Moderators
              wrote on last edited by J.Hilk
              #6

              @SPlatten mmmh,

              An idea could be, to move your localHostOption to it's own QML file, check that independently from your project and if that works as expected, import that one in your project


              Edit, if you're using QtCreator, simply right click in the Item, and select Refactoring -> Component in separate file.
              That will trigger a small wizard to help you in that process


              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.

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

                @SPlatten mmmh,

                An idea could be, to move your localHostOption to it's own QML file, check that independently from your project and if that works as expected, import that one in your project


                Edit, if you're using QtCreator, simply right click in the Item, and select Refactoring -> Component in separate file.
                That will trigger a small wizard to help you in that process

                SPlattenS Offline
                SPlattenS Offline
                SPlatten
                wrote on last edited by SPlatten
                #7

                @J-Hilk , I'm still quite new to QML, I've created a new QML file called localHostOption, how do I replace the Rectangle block in the ConnectionSelection.qml with the localHostOption from the file?

                I've imprted:

                import "../qml/localHostOption.qml" as localHostOption
                

                This file contains:

                import QtQuick 2.6
                import "Utils.js" as Utils
                
                Rectangle {
                    id: localHostOption
                
                    height: 64; width:parent.width
                    color: "transparent"
                
                    Text{
                        id:localhostText
                        color: d.textColour
                        height:parent.height
                        verticalAlignment: Text.AlignVCenter
                        //: Button caption. Clicking it means the user is saying "make a network connection to the server that is running on the machine I am using".
                        text: qsTranslate("Startup", "Connect to local machine")
                        anchors.left: parent.left //put this on the left side
                        anchors.leftMargin: 5
                        font.pointSize: 14
                    }
                    Image{
                        id: iconLocal
                        anchors.right: parent.right //put this on the right side
                        source: "images/fake assets/arrow_right_green.png"
                        width: 64; height: 64
                        opacity: 0.7
                        MouseArea {
                            anchors.fill: parent
                            hoverEnabled: true
                            acceptedButtons: Qt.LeftButton
                            onClicked: {
                                connectionSelector.ipChosen("localhost", d.keyString);
                            }
                            onEntered: { iconLocal.opacity = 1.0; }
                            onExited: { iconLocal.opacity = 0.7; }
                        }
                    }
                }
                

                Not sure how I then drop replace the existing block in the file with a reference to this?

                Kind Regards,
                Sy

                J.HilkJ 1 Reply Last reply
                0
                • SPlattenS SPlatten

                  @J-Hilk , I'm still quite new to QML, I've created a new QML file called localHostOption, how do I replace the Rectangle block in the ConnectionSelection.qml with the localHostOption from the file?

                  I've imprted:

                  import "../qml/localHostOption.qml" as localHostOption
                  

                  This file contains:

                  import QtQuick 2.6
                  import "Utils.js" as Utils
                  
                  Rectangle {
                      id: localHostOption
                  
                      height: 64; width:parent.width
                      color: "transparent"
                  
                      Text{
                          id:localhostText
                          color: d.textColour
                          height:parent.height
                          verticalAlignment: Text.AlignVCenter
                          //: Button caption. Clicking it means the user is saying "make a network connection to the server that is running on the machine I am using".
                          text: qsTranslate("Startup", "Connect to local machine")
                          anchors.left: parent.left //put this on the left side
                          anchors.leftMargin: 5
                          font.pointSize: 14
                      }
                      Image{
                          id: iconLocal
                          anchors.right: parent.right //put this on the right side
                          source: "images/fake assets/arrow_right_green.png"
                          width: 64; height: 64
                          opacity: 0.7
                          MouseArea {
                              anchors.fill: parent
                              hoverEnabled: true
                              acceptedButtons: Qt.LeftButton
                              onClicked: {
                                  connectionSelector.ipChosen("localhost", d.keyString);
                              }
                              onEntered: { iconLocal.opacity = 1.0; }
                              onExited: { iconLocal.opacity = 0.7; }
                          }
                      }
                  }
                  

                  Not sure how I then drop replace the existing block in the file with a reference to this?

                  J.HilkJ Online
                  J.HilkJ Online
                  J.Hilk
                  Moderators
                  wrote on last edited by
                  #8

                  @SPlatten
                  your new qml file could look like this:

                  import QtQuick 2.6
                  
                  Rectangle {
                      id: localHostOption
                  
                      signal localHostChoosen()
                      onLocalHostChoosen: console.log("local Host is choosen")
                      property alias textColor: localhostText
                  
                      height: 64; width:parent.width
                      color: "transparent"
                  
                      Text{
                          id:localhostText
                          height:parent.height
                          verticalAlignment: Text.AlignVCenter
                          //: Button caption. Clicking it means the user is saying "make a network connection to the server that is running on the machine I am using".
                          text: qsTranslate("Startup", "Connect to local machine")
                          anchors.left: parent.left //put this on the left side
                          anchors.leftMargin: 5
                          font.pointSize: 14
                      }
                      Image{
                          id: iconLocal
                          anchors.right: parent.right //put this on the right side
                          source: "images/fake assets/arrow_right_green.png"
                          width: 64; height: 64
                          opacity: 0.7
                      }
                      MouseArea {
                          anchors.fill: parent
                          hoverEnabled: true
                          acceptedButtons: Qt.LeftButton
                  
                          onClicked: {
                              localHostOption.localHostChoosen()
                          }
                          onEntered: iconLocal.opacity = 1.0
                          onExited: iconLocal.opacity = 0.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.

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

                    @SPlatten
                    your new qml file could look like this:

                    import QtQuick 2.6
                    
                    Rectangle {
                        id: localHostOption
                    
                        signal localHostChoosen()
                        onLocalHostChoosen: console.log("local Host is choosen")
                        property alias textColor: localhostText
                    
                        height: 64; width:parent.width
                        color: "transparent"
                    
                        Text{
                            id:localhostText
                            height:parent.height
                            verticalAlignment: Text.AlignVCenter
                            //: Button caption. Clicking it means the user is saying "make a network connection to the server that is running on the machine I am using".
                            text: qsTranslate("Startup", "Connect to local machine")
                            anchors.left: parent.left //put this on the left side
                            anchors.leftMargin: 5
                            font.pointSize: 14
                        }
                        Image{
                            id: iconLocal
                            anchors.right: parent.right //put this on the right side
                            source: "images/fake assets/arrow_right_green.png"
                            width: 64; height: 64
                            opacity: 0.7
                        }
                        MouseArea {
                            anchors.fill: parent
                            hoverEnabled: true
                            acceptedButtons: Qt.LeftButton
                    
                            onClicked: {
                                localHostOption.localHostChoosen()
                            }
                            onEntered: iconLocal.opacity = 1.0
                            onExited: iconLocal.opacity = 0.7
                        }
                    }
                    
                    SPlattenS Offline
                    SPlattenS Offline
                    SPlatten
                    wrote on last edited by
                    #9

                    @J-Hilk , ok, so I created: LocalHostOption.qml

                    import QtQuick 2.6
                    import "Utils.js" as Utils
                    
                    Rectangle {
                        id: localHostOption
                        color: "transparent"
                        height: 64
                        width: parent.width
                    
                        Text{
                            id:localhostText
                            color: d.textColour
                            height:parent.height
                            verticalAlignment: Text.AlignVCenter
                            //: Button caption. Clicking it means the user is saying "make a network connection to the server that is running on the machine I am using".
                            text: qsTranslate("Startup", "Connect to local machine")
                            anchors.left: parent.left //put this on the left side
                            anchors.leftMargin: 5
                            font.pointSize: 14
                        }
                        Image{
                            id: iconLocal
                            anchors.right: parent.right //put this on the right side
                            source: "images/fake assets/arrow_right_green.png"
                            width: 64
                            height: 64
                            opacity: 0.7
                    
                            MouseArea {
                                anchors.fill: parent
                                hoverEnabled: true
                                acceptedButtons: Qt.LeftButton
                                onClicked: {
                                    connectionSelector.ipChosen("localhost", d.keyString);
                                }
                                onEntered: { iconLocal.opacity = 1.0; }
                                onExited: { iconLocal.opacity = 0.7; }
                            }
                        }
                    }
                    

                    And modified the original file, ConnectionSelector.qml:

                    ////////////////////////////////////////////////////////////////////
                    // ConnectionSelector.qml
                    // Allows user to specify connecting to localhost or to a
                    // manually entered ip address. This is not normally shown
                    // as mostly the UI will be run using the auto-connect option
                    // by specifying the IP at the command line.
                    //
                    // Note that unlike every other screen, this is more likely to
                    // be mouse-driven than touch-driven.
                    //
                    import QtQuick 2.6
                    import "Utils.js" as Utils
                    
                    Rectangle {
                        id: connectionSelector
                    
                        //"private" variables
                        QtObject {
                            id:d
                    /*        property string ipString: "" */
                              property string keyString: ""
                            property color textColour: "#ffffff"
                            property string lastIpAddress: ""
                        }
                    
                        Component.onCompleted: {
                            initialiseIPandKey()
                        }
                    
                        //loads previously-saved ip/key information from the database
                        function initialiseIPandKey(){
                            Utils.initialiseStorage("UI");
                            var lastIpAddress = Utils.setting("lastIpAddress");
                            var lastAccessKey = Utils.setting("lastAccessKey");
                            if (lastIpAddress === undefined) {
                                Utils.setSetting("lastIpAddress", "192.168.10.254");
                            }
                            if (lastAccessKey === undefined) {
                                Utils.setSetting("lastAccessKey", "1.2.3.4");
                            }
                            lastIpAddress = Utils.setting("lastIpAddress");
                            lastAccessKey = Utils.setting("lastAccessKey");
                    
                            d.lastIpAddress = lastIpAddress
                            d.keyString = lastAccessKey
                        }
                    
                        //save the ip for later so it's known when we reload
                        function saveCustomIp(ip) {
                            Utils.setSetting("lastIpAddress", ip)
                        }
                    
                        //actually makes the connection happen by calling into the connection manager
                        function ipChosen(ip, keyString) {
                            connectionManagerModel.setConnectionAttributes(ip, keyString)
                            connectionManagerModel.initialiseConnection()
                        }
                    
                        //static background image
                        Image {
                            anchors.fill: parent
                            id: backgroundImage
                            source: "images/STARTUP_SHUTDOWN/startup_background.jpg"
                        }
                    
                    
                        //displays connection-state-appropriate text (see state machine for content)
                        Text {
                            id: licenceText
                            anchors { top: parent.top; left: parent.left; leftMargin: 10; topMargin: 10 }
                            font.pointSize: 10
                            color:  userAccessModel.licenceExpired ? Utils.expiredLicenceColour() : Utils.splashScreenTextColor()
                            text: (userAccessModel.isAuthenticated || userAccessModel.licenceExpired)
                                    ? "Licenced to " +userAccessModel.authenticatedUser + ". Expires: " + userAccessModel.licenceExpiryDate
                                    : "Not licenced for remote connections"
                        }
                    
                        //two rows of connection options
                        //localhost
                        //manually entered address
                        Column {
                            anchors { bottom: parent.bottom; bottomMargin: 20 }
                            spacing: 20
                            width: 600 //allow plenty of room for the manually entered address
                    
                            //first row, localhost selection
                            LocalHostOption {
                                id: localHostOption
                            }
                    
                            //second row, manually-specified ip
                            Rectangle {
                                id: customIPOption
                                property string ip: input.text
                                visible: userAccessModel.isAuthenticated
                                height:64; width: parent.width
                                color: "transparent"
                    
                                Text{
                                    id:addressLabel
                                    height:parent.height
                                    verticalAlignment: Text.AlignVCenter
                                    anchors.left: parent.left
                                    color: d.textColour
                                    //: Button caption. Clicking it means the user is saying "make a network connection to a server running on another machine"
                                    text: qsTranslate("Startup", "Connect to remote machine:")
                                    font.pointSize: 14
                                    anchors.leftMargin: 5
                                }
                                TextInput{
                                    id: input
                                    anchors.right: iconCustom.left
                                    anchors.left: addressLabel.right
                    
                                    //couldn't get it to vertically align nicely.
                                    //fixing the height achieves the same effect.
                                    anchors.verticalCenter: addressLabel.verticalCenter
                                    height: 23
                    
                                    color: d.textColour
                                    font.pointSize: 14
                                    font.italic: true
                                    selectByMouse: true
                    
                                    //initially load the last-used-address
                                    text: d.lastIpAddress
                    
                                    Keys.onPressed:{ //allow user to type ip and hit enter instead of clicking button
                                        if( connectionSelector.opacity > 0.0 ){
                                            if( event.key === Qt.Key_Return || event.key === Qt.Key_Enter ){
                                                saveCustomIp(customIPOption.ip)
                                                connectionSelector.ipChosen(customIPOption.ip, d.keyString)
                                            }
                                        }
                                    }
                                }
                                Image{
                                    id: iconCustom
                                    anchors.right: parent.right
                                    source: "images/fake assets/arrow_right_green.png"
                                    width: 64; height: 64
                                    opacity: 0.7
                                    MouseArea {
                                        anchors.fill: parent
                                        hoverEnabled: true
                                        acceptedButtons: Qt.LeftButton
                                        onClicked: {
                                            saveCustomIp(customIPOption.ip)
                                            connectionSelector.ipChosen(customIPOption.ip, d.keyString)
                                        }
                                        onEntered: { iconCustom.opacity = 1.0; }
                                        onExited: { iconCustom.opacity = 0.7; }
                                    }
                                }
                            }
                        }
                    }
                    

                    Recompiled and ran, everything looks the same and onClicked still doesn't work.

                    Kind Regards,
                    Sy

                    J.HilkJ 1 Reply Last reply
                    0
                    • SPlattenS SPlatten

                      @J-Hilk , ok, so I created: LocalHostOption.qml

                      import QtQuick 2.6
                      import "Utils.js" as Utils
                      
                      Rectangle {
                          id: localHostOption
                          color: "transparent"
                          height: 64
                          width: parent.width
                      
                          Text{
                              id:localhostText
                              color: d.textColour
                              height:parent.height
                              verticalAlignment: Text.AlignVCenter
                              //: Button caption. Clicking it means the user is saying "make a network connection to the server that is running on the machine I am using".
                              text: qsTranslate("Startup", "Connect to local machine")
                              anchors.left: parent.left //put this on the left side
                              anchors.leftMargin: 5
                              font.pointSize: 14
                          }
                          Image{
                              id: iconLocal
                              anchors.right: parent.right //put this on the right side
                              source: "images/fake assets/arrow_right_green.png"
                              width: 64
                              height: 64
                              opacity: 0.7
                      
                              MouseArea {
                                  anchors.fill: parent
                                  hoverEnabled: true
                                  acceptedButtons: Qt.LeftButton
                                  onClicked: {
                                      connectionSelector.ipChosen("localhost", d.keyString);
                                  }
                                  onEntered: { iconLocal.opacity = 1.0; }
                                  onExited: { iconLocal.opacity = 0.7; }
                              }
                          }
                      }
                      

                      And modified the original file, ConnectionSelector.qml:

                      ////////////////////////////////////////////////////////////////////
                      // ConnectionSelector.qml
                      // Allows user to specify connecting to localhost or to a
                      // manually entered ip address. This is not normally shown
                      // as mostly the UI will be run using the auto-connect option
                      // by specifying the IP at the command line.
                      //
                      // Note that unlike every other screen, this is more likely to
                      // be mouse-driven than touch-driven.
                      //
                      import QtQuick 2.6
                      import "Utils.js" as Utils
                      
                      Rectangle {
                          id: connectionSelector
                      
                          //"private" variables
                          QtObject {
                              id:d
                      /*        property string ipString: "" */
                                property string keyString: ""
                              property color textColour: "#ffffff"
                              property string lastIpAddress: ""
                          }
                      
                          Component.onCompleted: {
                              initialiseIPandKey()
                          }
                      
                          //loads previously-saved ip/key information from the database
                          function initialiseIPandKey(){
                              Utils.initialiseStorage("UI");
                              var lastIpAddress = Utils.setting("lastIpAddress");
                              var lastAccessKey = Utils.setting("lastAccessKey");
                              if (lastIpAddress === undefined) {
                                  Utils.setSetting("lastIpAddress", "192.168.10.254");
                              }
                              if (lastAccessKey === undefined) {
                                  Utils.setSetting("lastAccessKey", "1.2.3.4");
                              }
                              lastIpAddress = Utils.setting("lastIpAddress");
                              lastAccessKey = Utils.setting("lastAccessKey");
                      
                              d.lastIpAddress = lastIpAddress
                              d.keyString = lastAccessKey
                          }
                      
                          //save the ip for later so it's known when we reload
                          function saveCustomIp(ip) {
                              Utils.setSetting("lastIpAddress", ip)
                          }
                      
                          //actually makes the connection happen by calling into the connection manager
                          function ipChosen(ip, keyString) {
                              connectionManagerModel.setConnectionAttributes(ip, keyString)
                              connectionManagerModel.initialiseConnection()
                          }
                      
                          //static background image
                          Image {
                              anchors.fill: parent
                              id: backgroundImage
                              source: "images/STARTUP_SHUTDOWN/startup_background.jpg"
                          }
                      
                      
                          //displays connection-state-appropriate text (see state machine for content)
                          Text {
                              id: licenceText
                              anchors { top: parent.top; left: parent.left; leftMargin: 10; topMargin: 10 }
                              font.pointSize: 10
                              color:  userAccessModel.licenceExpired ? Utils.expiredLicenceColour() : Utils.splashScreenTextColor()
                              text: (userAccessModel.isAuthenticated || userAccessModel.licenceExpired)
                                      ? "Licenced to " +userAccessModel.authenticatedUser + ". Expires: " + userAccessModel.licenceExpiryDate
                                      : "Not licenced for remote connections"
                          }
                      
                          //two rows of connection options
                          //localhost
                          //manually entered address
                          Column {
                              anchors { bottom: parent.bottom; bottomMargin: 20 }
                              spacing: 20
                              width: 600 //allow plenty of room for the manually entered address
                      
                              //first row, localhost selection
                              LocalHostOption {
                                  id: localHostOption
                              }
                      
                              //second row, manually-specified ip
                              Rectangle {
                                  id: customIPOption
                                  property string ip: input.text
                                  visible: userAccessModel.isAuthenticated
                                  height:64; width: parent.width
                                  color: "transparent"
                      
                                  Text{
                                      id:addressLabel
                                      height:parent.height
                                      verticalAlignment: Text.AlignVCenter
                                      anchors.left: parent.left
                                      color: d.textColour
                                      //: Button caption. Clicking it means the user is saying "make a network connection to a server running on another machine"
                                      text: qsTranslate("Startup", "Connect to remote machine:")
                                      font.pointSize: 14
                                      anchors.leftMargin: 5
                                  }
                                  TextInput{
                                      id: input
                                      anchors.right: iconCustom.left
                                      anchors.left: addressLabel.right
                      
                                      //couldn't get it to vertically align nicely.
                                      //fixing the height achieves the same effect.
                                      anchors.verticalCenter: addressLabel.verticalCenter
                                      height: 23
                      
                                      color: d.textColour
                                      font.pointSize: 14
                                      font.italic: true
                                      selectByMouse: true
                      
                                      //initially load the last-used-address
                                      text: d.lastIpAddress
                      
                                      Keys.onPressed:{ //allow user to type ip and hit enter instead of clicking button
                                          if( connectionSelector.opacity > 0.0 ){
                                              if( event.key === Qt.Key_Return || event.key === Qt.Key_Enter ){
                                                  saveCustomIp(customIPOption.ip)
                                                  connectionSelector.ipChosen(customIPOption.ip, d.keyString)
                                              }
                                          }
                                      }
                                  }
                                  Image{
                                      id: iconCustom
                                      anchors.right: parent.right
                                      source: "images/fake assets/arrow_right_green.png"
                                      width: 64; height: 64
                                      opacity: 0.7
                                      MouseArea {
                                          anchors.fill: parent
                                          hoverEnabled: true
                                          acceptedButtons: Qt.LeftButton
                                          onClicked: {
                                              saveCustomIp(customIPOption.ip)
                                              connectionSelector.ipChosen(customIPOption.ip, d.keyString)
                                          }
                                          onEntered: { iconCustom.opacity = 1.0; }
                                          onExited: { iconCustom.opacity = 0.7; }
                                      }
                                  }
                              }
                          }
                      }
                      

                      Recompiled and ran, everything looks the same and onClicked still doesn't work.

                      J.HilkJ Online
                      J.HilkJ Online
                      J.Hilk
                      Moderators
                      wrote on last edited by
                      #10

                      @SPlatten ok

                      I have an idea!

                      I think you have somewhere inside your draw hierarchy an other MouseArea, that lies "ontop" of your current component.

                      That would explain, why hover is coming through, and click's don't.

                      MouseAreas do not forward (automatically) the click/press/release events


                      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.

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

                        @SPlatten ok

                        I have an idea!

                        I think you have somewhere inside your draw hierarchy an other MouseArea, that lies "ontop" of your current component.

                        That would explain, why hover is coming through, and click's don't.

                        MouseAreas do not forward (automatically) the click/press/release events

                        SPlattenS Offline
                        SPlattenS Offline
                        SPlatten
                        wrote on last edited by
                        #11

                        @J-Hilk , I wish it was that straight forward, as far as I can see there is only one other QML document above this and it does not contain a MouseArea.

                        Kind Regards,
                        Sy

                        J.HilkJ 1 Reply Last reply
                        0
                        • SPlattenS SPlatten

                          @J-Hilk , I wish it was that straight forward, as far as I can see there is only one other QML document above this and it does not contain a MouseArea.

                          J.HilkJ Online
                          J.HilkJ Online
                          J.Hilk
                          Moderators
                          wrote on last edited by
                          #12

                          @SPlatten I'm sure it is :D

                          Try it, load your LocalHostOption.qml directly no other component (you can use a new project)

                          Window {
                              id: window
                          
                              width: 120
                              height: 60
                          
                              visible: true
                          
                              LocalHostOptions {
                                  anchors.fill: parent
                              }
                          }
                          

                          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.

                          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