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. Sometimes QML property binding doesn't updates

Sometimes QML property binding doesn't updates

Scheduled Pinned Locked Moved Unsolved QML and Qt Quick
13 Posts 4 Posters 3.0k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • V Offline
    V Offline
    Viet
    wrote on last edited by
    #4

    Have you tried Qt.binding() ?
    Eg: Component.onCompleted: {
    maxCount = Qt.binding( function() { return convert(isMaxUser ? user.maxUserCount : admin.maxAdminCount) } )
    }

    1 Reply Last reply
    0
    • M Offline
      M Offline
      Manta Ray
      wrote on last edited by Manta Ray
      #5

      I've found that sometimes (very seldom 1 from 50) binding to method doesn't work.
      I've separated property and method call in that way:

      property int value: isMaxUser ? user.maxUserCount : admin.maxAdminCount
      property int maxCount: convert(value)
      onValueChanged: {
          maxCount = convert(value)
      }
      

      I hope this issue won't reproduce anymore...

      R 1 Reply Last reply
      0
      • M Manta Ray

        I've found that sometimes (very seldom 1 from 50) binding to method doesn't work.
        I've separated property and method call in that way:

        property int value: isMaxUser ? user.maxUserCount : admin.maxAdminCount
        property int maxCount: convert(value)
        onValueChanged: {
            maxCount = convert(value)
        }
        

        I hope this issue won't reproduce anymore...

        R Offline
        R Offline
        Roumed
        wrote on last edited by Roumed
        #6

        @Manta-Ray
        Which binding doesn't work?
        Could you give us a trace logged code with logs?

        E 1 Reply Last reply
        0
        • R Roumed

          @Manta-Ray
          Which binding doesn't work?
          Could you give us a trace logged code with logs?

          E Offline
          E Offline
          Eeli K
          wrote on last edited by
          #7

          @Roumed said in Sometimes QML property binding doesn't updates:

          Could you give us a trace logged code with logs?

          Or at least the whole project/code and instructions how to try to reproduce the problem. This looks interesting if it really does happen without a bug in your code.

          1 Reply Last reply
          1
          • M Offline
            M Offline
            Manta Ray
            wrote on last edited by
            #8

            Sometimes this:

            property int maxCount: convert(isMaxUser ? user.maxUserCount : admin.maxAdminCount)
            

            doesn't work. I see the log message in backend before emit signal user.maxUserCountChanged, then I see that label doesn't changes and doesn't see log message in convert method. So I decided that sometimes, depends on CPU usage or count of processes in the system or something else this method doesn't call. It happens very-very seldom, maybe 1 from100 times.

            E 1 Reply Last reply
            0
            • M Manta Ray

              Sometimes this:

              property int maxCount: convert(isMaxUser ? user.maxUserCount : admin.maxAdminCount)
              

              doesn't work. I see the log message in backend before emit signal user.maxUserCountChanged, then I see that label doesn't changes and doesn't see log message in convert method. So I decided that sometimes, depends on CPU usage or count of processes in the system or something else this method doesn't call. It happens very-very seldom, maybe 1 from100 times.

              E Offline
              E Offline
              Eeli K
              wrote on last edited by
              #9

              @Manta-Ray What is convert() ?

              M 1 Reply Last reply
              0
              • E Eeli K

                @Manta-Ray What is convert() ?

                M Offline
                M Offline
                Manta Ray
                wrote on last edited by
                #10

                @Eeli-K This is the method which rounds values.
                I can't show you the original code, but it looks like:

                .cpp
                if(...){
                    print("Max user count changed:  %d", maxUserCount);
                    emit maxUserCountChanges();
                }
                
                .qml
                property int maxCount: convert(isMaxUser ? user.maxUserCount : admin.maxAdminCount)
                
                onMaxCountChanged:{
                    console.log("Max count changed: ", maxCount)
                }
                
                Label{
                	text: maxCount.toString()
                }
                
                function convert(int val){
                    console.log("Convert value: ", val)
                    .......
                }
                
                

                During work I see the next logs:
                123.12 Max user count changed: 4

                And never see:
                Convert value: 4
                or
                Max count changed: 4

                It works almost always but sometimes...

                R 1 Reply Last reply
                0
                • M Manta Ray

                  @Eeli-K This is the method which rounds values.
                  I can't show you the original code, but it looks like:

                  .cpp
                  if(...){
                      print("Max user count changed:  %d", maxUserCount);
                      emit maxUserCountChanges();
                  }
                  
                  .qml
                  property int maxCount: convert(isMaxUser ? user.maxUserCount : admin.maxAdminCount)
                  
                  onMaxCountChanged:{
                      console.log("Max count changed: ", maxCount)
                  }
                  
                  Label{
                  	text: maxCount.toString()
                  }
                  
                  function convert(int val){
                      console.log("Convert value: ", val)
                      .......
                  }
                  
                  

                  During work I see the next logs:
                  123.12 Max user count changed: 4

                  And never see:
                  Convert value: 4
                  or
                  Max count changed: 4

                  It works almost always but sometimes...

                  R Offline
                  R Offline
                  Roumed
                  wrote on last edited by
                  #11

                  @Manta-Ray
                  We definitely need to know more about your environment.

                  M 1 Reply Last reply
                  0
                  • R Roumed

                    @Manta-Ray
                    We definitely need to know more about your environment.

                    M Offline
                    M Offline
                    Manta Ray
                    wrote on last edited by Manta Ray
                    #12

                    @Roumed Application is working on ubuntu 14.04. I don't have an information about hardware.

                    E 1 Reply Last reply
                    0
                    • M Manta Ray

                      @Roumed Application is working on ubuntu 14.04. I don't have an information about hardware.

                      E Offline
                      E Offline
                      Eeli K
                      wrote on last edited by
                      #13

                      @Manta-Ray
                      If this really is a bug in Qt, it's important. Could you at least create a project, as small as possible, which would produce the same problem? It's impossible to help, find the bug and fix it if you can't show exactly how it can be reproduced, especially when it's random. Also information about the hardware is necessary if it doesn't happen to others with their platform.

                      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