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. How to bind TextInput.text to QString property in two ways?
Forum Updated to NodeBB v4.3 + New Features

How to bind TextInput.text to QString property in two ways?

Scheduled Pinned Locked Moved QML and Qt Quick
14 Posts 4 Posters 19.1k 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.
  • A Offline
    A Offline
    axeljaeger
    wrote on last edited by
    #5

    Thank you. This is exactly the information I was looking for.

    1 Reply Last reply
    0
    • N Offline
      N Offline
      njeisecke
      wrote on last edited by
      #6

      Hi,

      Doing this will generate a console warning:

      QML TextInput: Binding loop detected for property "text"

      It works nevertheless but I don't like warnings.

      Any ideas?

      Regards

      Nils

      1 Reply Last reply
      0
      • A Offline
        A Offline
        andre
        wrote on last edited by
        #7

        File a bugreport :-)

        1 Reply Last reply
        0
        • N Offline
          N Offline
          njeisecke
          wrote on last edited by
          #8

          Well, it actually is a binding loop. However it does not do any harm as long as the setter on the C++ side is implemented correctly.

          1 Reply Last reply
          0
          • A Offline
            A Offline
            andre
            wrote on last edited by
            #9

            I meant it more as: file a bug report with a suggestion to make two way bindings possible :-)

            1 Reply Last reply
            0
            • M Offline
              M Offline
              mbrasser
              wrote on last edited by
              #10

              [quote author="njeisecke" date="1305030760"]Hi,

              Doing this will generate a console warning:

              QML TextInput: Binding loop detected for property "text"

              It works nevertheless but I don't like warnings.

              Any ideas?
              [/quote]

              Hi Nils,

              Is it the exact snippet above (with a QLineEdit in C++) you are testing or something else?

              Typically this warning is avoided via the C++ implementation of the setter, e.g. setText() will be implemented to only emit the NOTIFY signal if the property actually changes. I thought in this case both TextInput and QLineEdit would have done this, though (so there might be something else at play here that I've missed).

              Regards,
              Michael

              1 Reply Last reply
              0
              • A Offline
                A Offline
                andre
                wrote on last edited by
                #11

                Are you suggesting that Qt Quick is at runtime able to analyze if the (C++) objects block emitting a changed signal if you set the same value on a property? And that they only should give the Binding Loop warning if they don't block the signal? That would be pretty cool! But I think that is unlikely. I think it is a warning because it can not be detected if the signal is emitted. If it could, it would (should) be an error instead.

                1 Reply Last reply
                0
                • N Offline
                  N Offline
                  njeisecke
                  wrote on last edited by
                  #12

                  Hi Michael,

                  my setter was on the c++ side and indeed wrongly implemented (stupid me).

                  With an implementation like this everything works as expected:

                  @
                  void MyObject::setValue(const QString &value)
                  {
                  // this avoids the (absolutely correct) warning
                  if (m_value == value)
                  return;

                  m_value = value;
                  emit valueChanged():
                  }
                  @

                  So actually there seems to be some runtime analysis. Cool ;-)

                  1 Reply Last reply
                  0
                  • A Offline
                    A Offline
                    andre
                    wrote on last edited by
                    #13

                    Does implementing it like this fix the warning? That would be awesome!
                    If so, then perhaps the warning should be an error instead?

                    1 Reply Last reply
                    0
                    • N Offline
                      N Offline
                      njeisecke
                      wrote on last edited by
                      #14

                      Yes it does, I've just commented out the check and the warning appears.

                      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