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. Use of onCompleted
Forum Updated to NodeBB v4.3 + New Features

Use of onCompleted

Scheduled Pinned Locked Moved Solved General and Desktop
14 Posts 5 Posters 4.6k Views 3 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.
  • B Offline
    B Offline
    BKBK
    wrote on last edited by
    #1

    I am a novice at QT and trying to understand what someone from another state has done. An example is the use of: OnCompleted.
    From: https://doc.qt.io/qt-5.10/qml-qtqml-component.html
    Section: completed()
    The text states: Emitted after the object has been instantiated.
    Question: Emitted to what? Something must catch it in order to be useful.
    Should there be something like:
    Item
    {
    Id:item_36
    …
    Compononent.onCompleted: { … }
    … }
    And somewhere else there is something like:
    wait_for( item_36.OnCompleted )

    JKSHJ 1 Reply Last reply
    0
    • 6thC6 Offline
      6thC6 Offline
      6thC
      wrote on last edited by
      #2

      emitted - if nothing is connected to it - nothing

      You'll want to be reading this:
      http://doc.qt.io/qt-5/signalsandslots.html

      B 1 Reply Last reply
      1
      • B BKBK

        I am a novice at QT and trying to understand what someone from another state has done. An example is the use of: OnCompleted.
        From: https://doc.qt.io/qt-5.10/qml-qtqml-component.html
        Section: completed()
        The text states: Emitted after the object has been instantiated.
        Question: Emitted to what? Something must catch it in order to be useful.
        Should there be something like:
        Item
        {
        Id:item_36
        …
        Compononent.onCompleted: { … }
        … }
        And somewhere else there is something like:
        wait_for( item_36.OnCompleted )

        JKSHJ Offline
        JKSHJ Offline
        JKSH
        Moderators
        wrote on last edited by
        #3

        @BKBK said in Use of onCompleted:

        Should there be something like:
        Item
        {
        Id:item_36
        …
        Compononent.onCompleted: { … }
        … }
        And somewhere else there is something like:
        wait_for( item_36.OnCompleted )

        The wait_for part is not needed. Following the example in your link:

        Rectangle {
            Component.onCompleted: console.log("Completed Running!")
        }
        

        As soon as the Rectangle finishes loading, it emits the completed signal. This triggers the onCompleted signal handler, which runs this JavaScript code:

        console.log("Completed Running!")
        

        Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

        1 Reply Last reply
        3
        • 6thC6 6thC

          emitted - if nothing is connected to it - nothing

          You'll want to be reading this:
          http://doc.qt.io/qt-5/signalsandslots.html

          B Offline
          B Offline
          BKBK
          wrote on last edited by
          #4

          @6thC
          In that signals and slots page referenced by 6thC, in the third code block, it defines an object named Counter with a function SetValue() and one argument. If the new value is different it will emit signal: valueChange( value )

          In the next block the code instantiates two objects of type Counter, a and b.

          Skipping the connect part I see that method setValue() is called for object a with value 12 and the same goes for object b and value 48.

          Backing up to that second line of code there are two parts I do not get. I searched but did not find any discussion of use of &. Does this follow the C language and, in this use, the arguments to function/method connect are received by address and opposed to received by value? If so, why does this code fragment require the address of the variable rather than its value?

          I don’t know what that line of code beginning with QObject::connect(…) does.

          I did use ctl-f and searched for “connect” on the page but did not recognize anything that explained the syntax/grammar for this statement. I searched other places within the QT web sites and did not find a section describing the various characters used by QT. I presume that QT assigns the same meanings as the C language.

          B 1 Reply Last reply
          0
          • B BKBK

            @6thC
            In that signals and slots page referenced by 6thC, in the third code block, it defines an object named Counter with a function SetValue() and one argument. If the new value is different it will emit signal: valueChange( value )

            In the next block the code instantiates two objects of type Counter, a and b.

            Skipping the connect part I see that method setValue() is called for object a with value 12 and the same goes for object b and value 48.

            Backing up to that second line of code there are two parts I do not get. I searched but did not find any discussion of use of &. Does this follow the C language and, in this use, the arguments to function/method connect are received by address and opposed to received by value? If so, why does this code fragment require the address of the variable rather than its value?

            I don’t know what that line of code beginning with QObject::connect(…) does.

            I did use ctl-f and searched for “connect” on the page but did not recognize anything that explained the syntax/grammar for this statement. I searched other places within the QT web sites and did not find a section describing the various characters used by QT. I presume that QT assigns the same meanings as the C language.

            B Offline
            B Offline
            BKBK
            wrote on last edited by
            #5

            @BKBK
            On re-read of my post I should have put that entire line of code in my reply. I do not see an edit button so I post that line in this reply.

            QObject::connect(&a, &Counter::valueChanged,
            &b, &Counter::setValue);

            Please explain what this does?

            JKSHJ 1 Reply Last reply
            0
            • B BKBK

              @BKBK
              On re-read of my post I should have put that entire line of code in my reply. I do not see an edit button so I post that line in this reply.

              QObject::connect(&a, &Counter::valueChanged,
              &b, &Counter::setValue);

              Please explain what this does?

              JKSHJ Offline
              JKSHJ Offline
              JKSH
              Moderators
              wrote on last edited by
              #6

              Have a look also at the examples in http://doc.qt.io/qt-5/signalsandslots-syntaxes.html

              @BKBK said in Use of onCompleted:

              @BKBK
              On re-read of my post I should have put that entire line of code in my reply. I do not see an edit button so I post that line in this reply.

              Click the triple-dots at the bottom-right corner of your post. The Edit button is inside.

              QObject::connect(&a, &Counter::valueChanged,
              &b, &Counter::setValue);

              Please explain what this does?

              It connects the valueChanged() signal of a instance to the setValue() slot of b.

              For example, when a's value is changed to 42, Qt automatically calls this behind-the-scenes:

              b->setValue(42);
              

              @BKBK said in Use of onCompleted:

              I presume that QT assigns the same meanings as the C language.

              Qt is a C++ library.

              Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

              B 1 Reply Last reply
              2
              • 6thC6 Offline
                6thC6 Offline
                6thC
                wrote on last edited by
                #7

                Well, that link does explain... it's actually a really good explanation. What I can attempt will surely leave gaps but here goes:

                &a is the reference to an object instance of Counter class type identified as a
                Counter has a function valueChanged

                Connect takes x2 (sender && receiver objects) instance and a function signatures. Also a connection type argument.

                So that line of code is connecting instance a's valueChanged function to instance b's setValue slot (probably, it maybe a signal, all we know is it has the same function signature as valueChanged: see new sig/slot syntax

                JKSHJ 1 Reply Last reply
                0
                • 6thC6 6thC

                  Well, that link does explain... it's actually a really good explanation. What I can attempt will surely leave gaps but here goes:

                  &a is the reference to an object instance of Counter class type identified as a
                  Counter has a function valueChanged

                  Connect takes x2 (sender && receiver objects) instance and a function signatures. Also a connection type argument.

                  So that line of code is connecting instance a's valueChanged function to instance b's setValue slot (probably, it maybe a signal, all we know is it has the same function signature as valueChanged: see new sig/slot syntax

                  JKSHJ Offline
                  JKSHJ Offline
                  JKSH
                  Moderators
                  wrote on last edited by
                  #8

                  @6thC said in Use of onCompleted:

                  What I can attempt will surely leave gaps but here goes:

                  &a is the reference to an object instance of Counter class type identified as a
                  Counter has a function valueChanged

                  Connect takes x2 (sender && receiver objects) instance and a function signatures. Also a connection type argument.

                  So that line of code is connecting instance a's valueChanged function to instance b's setValue slot (probably, it maybe a signal, all we know is it has the same function signature as valueChanged: see new sig/slot syntax

                  Yep, that's right!

                  Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                  1 Reply Last reply
                  0
                  • B Offline
                    B Offline
                    BKBK
                    wrote on last edited by
                    #9

                    I am still missing something. Go back to that one line of code from the page on Signals & Slots.
                    QObject::connect(&a, &Counter::valueChanged, &b, &Counter::setValue);

                    If there was a, b, and a new item c could we write:

                    QObject::connect(&a, &Counter::valueChanged, &b, &Counter::setValue, &c, &Counter::setValue);

                    The function connect() had, what I view as two sets of arguments, with each set containing two items, the address of the object and the address of an integer that was changed.
                    In the original line of code those two arguments were repeated once for each item that could send the signal. The method connect() can associate N receivers. Just add a pair of arguments for each sender that is to be connected to the slot owned by the code that calls method connect().
                    Is that right.

                    And just to be sure, in the line of code the argument: &a means that the address of object a is being provided to method connect. Is that correct.

                    JKSHJ 1 Reply Last reply
                    0
                    • JKSHJ JKSH

                      Have a look also at the examples in http://doc.qt.io/qt-5/signalsandslots-syntaxes.html

                      @BKBK said in Use of onCompleted:

                      @BKBK
                      On re-read of my post I should have put that entire line of code in my reply. I do not see an edit button so I post that line in this reply.

                      Click the triple-dots at the bottom-right corner of your post. The Edit button is inside.

                      QObject::connect(&a, &Counter::valueChanged,
                      &b, &Counter::setValue);

                      Please explain what this does?

                      It connects the valueChanged() signal of a instance to the setValue() slot of b.

                      For example, when a's value is changed to 42, Qt automatically calls this behind-the-scenes:

                      b->setValue(42);
                      

                      @BKBK said in Use of onCompleted:

                      I presume that QT assigns the same meanings as the C language.

                      Qt is a C++ library.

                      B Offline
                      B Offline
                      BKBK
                      wrote on last edited by
                      #10

                      @JKSH My Internet Explorer does not display the ellipsis (triple dots). I tried ctl-F and it says that .. (double dots) are not found on the page, much less triple. Looks like a problem with the government firewall.
                      In another forum question I tried using [CODE] some_function()[/CODE] and it was displayed as simple text. Is there another phrase I can use to specifically mark lines of code?

                      1 Reply Last reply
                      0
                      • mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by mrjj
                        #11

                        Hi
                        Yes the & takes the address. When you see such in a connect then make sure the objects in question do not run out of scope.
                        like

                        void SomeFunc() {
                        Widget a;
                        Widget b;
                        connect( &a, xxx, &b, yyy)
                        } // both a and b are deleted here and the signal will never fire.

                        The connect works only for 2 objects.
                        The sender and the receiver

                        basically you are sying
                        connect( this object i point to, SIGNAL, other object i point to, SLOT )

                        Also note its legal to connect a signal to a signal to create a forward.
                        Also multiple can be connected to same signal.
                        So with your case with new C.
                        you would hook it up A like b is.

                        1 Reply Last reply
                        1
                        • SGaistS Offline
                          SGaistS Offline
                          SGaist
                          Lifetime Qt Champion
                          wrote on last edited by
                          #12

                          Hi,

                          The </> icon on the right of the editor icon bar inserts what is needed to create code blocks.

                          Interested in AI ? www.idiap.ch
                          Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                          1 Reply Last reply
                          0
                          • B BKBK

                            I am still missing something. Go back to that one line of code from the page on Signals & Slots.
                            QObject::connect(&a, &Counter::valueChanged, &b, &Counter::setValue);

                            If there was a, b, and a new item c could we write:

                            QObject::connect(&a, &Counter::valueChanged, &b, &Counter::setValue, &c, &Counter::setValue);

                            The function connect() had, what I view as two sets of arguments, with each set containing two items, the address of the object and the address of an integer that was changed.
                            In the original line of code those two arguments were repeated once for each item that could send the signal. The method connect() can associate N receivers. Just add a pair of arguments for each sender that is to be connected to the slot owned by the code that calls method connect().
                            Is that right.

                            And just to be sure, in the line of code the argument: &a means that the address of object a is being provided to method connect. Is that correct.

                            JKSHJ Offline
                            JKSHJ Offline
                            JKSH
                            Moderators
                            wrote on last edited by
                            #13

                            @BKBK said in Use of onCompleted:

                            If there was a, b, and a new item c could we write:

                            QObject::connect(&a, &Counter::valueChanged, &b, &Counter::setValue, &c, &Counter::setValue);

                            The function connect() had, what I view as two sets of arguments, with each set containing two items, the address of the object and the address of an integer that was changed.
                            In the original line of code those two arguments were repeated once for each item that could send the signal. The method connect() can associate N receivers. Just add a pair of arguments for each sender that is to be connected to the slot owned by the code that calls method connect().
                            Is that right.

                            No. You can only connect one sender to one receiver at a time.

                            See the documentation for QObject::connect() at https://doc.qt.io/qt-5/qobject.html#connect

                            And just to be sure, in the line of code the argument: &a means that the address of object a is being provided to method connect. Is that correct.

                            Yes.

                            @BKBK said in Use of onCompleted:

                            Internet Explorer

                            What version? Are you allowed to use a newer version or even a different browser?

                            does not display the ellipsis (triple dots). I tried ctl-F and it says that .. (double dots) are not found on the page

                            It's not searchable text. It's an image, a vertical stack of dots:

                            Post screenshot

                            Looks like a problem with the government firewall.

                            If you can't see the dots, I'm guessing it's either your browser is too old, or your browser has an ad blocker or a tracker blocker

                            In another forum question I tried using [CODE] some_function()[/CODE] and it was displayed as simple text. Is there another phrase I can use to specifically mark lines of code?

                            Add 3 backticks (`) before, and 3 after your code.

                            Qt Doc Search for browsers: forum.qt.io/topic/35616/web-browser-extension-for-improved-doc-searches

                            1 Reply Last reply
                            1
                            • 6thC6 Offline
                              6thC6 Offline
                              6thC
                              wrote on last edited by 6thC
                              #14

                              Just to clarify:

                              A signal can be connected to many slots and signals. Many signals can be connected to one slot.
                              
                              If a signal is connected to several slots, the slots are activated in the same order in which the connections were made, when the signal is emitted.
                              

                              I found personally to get the feel of signals and slots was to just use them.
                              Generally it's the pretty simple concept of:
                              single object instance (pointer or reference) and one of it's functions
                              connecting to another
                              single object instance (pointer or reference) and one of it's functions

                              So you can't define multiple connections in the one connect - you can do as many connects as you need.
                              The main thing is the function type signatures need to match. You can use overloaded methods and even use lambdas as well so pretty much anything you need - it can happen.

                              In your most recent question you'd just do:

                              QObject::connect(&a, &Counter::valueChanged, &b, &Counter::setValue);
                              QObject::connect(&a, &Counter::valueChanged, &c, &Counter::setValue);
                              
                              1 Reply Last reply
                              2

                              • Login

                              • Login or register to search.
                              • First post
                                Last post
                              0
                              • Categories
                              • Recent
                              • Tags
                              • Popular
                              • Users
                              • Groups
                              • Search
                              • Get Qt Extensions
                              • Unsolved