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