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. Example of calling a function to parent?
Forum Updated to NodeBB v4.3 + New Features

Example of calling a function to parent?

Scheduled Pinned Locked Moved Unsolved General and Desktop
38 Posts 5 Posters 4.3k Views 2 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.
  • SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #7

    Hi,

    The Qt documentation contains quite a lot of examples using signals and slots. You should go through the ones from the widgets module since it's the one you are implementing your application with.

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

    P 1 Reply Last reply
    0
    • SGaistS SGaist

      Hi,

      The Qt documentation contains quite a lot of examples using signals and slots. You should go through the ones from the widgets module since it's the one you are implementing your application with.

      P Offline
      P Offline
      Panoss
      wrote on last edited by
      #8

      @SGaist said in Example of calling a function to parent?:

      The Qt documentation contains quite a lot of examples using signals and slots

      Didn't find a full working example, only fragments of code I 'm trying to put together.
      If you have found a full working example please post it!

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

        Here you have the full list of the widgets examples.

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

        P 1 Reply Last reply
        1
        • SGaistS SGaist

          Here you have the full list of the widgets examples.

          P Offline
          P Offline
          Panoss
          wrote on last edited by
          #10

          @SGaist impressive selection of examples, I confess I had not discovered it!
          But reading their description I see nothing that suits my needs (two classes (Forms) communicating with Signals and Slots)

          1 Reply Last reply
          0
          • P Offline
            P Offline
            Panoss
            wrote on last edited by Panoss
            #11

            Ok, let me show you what I tried so far:

            In my FormB 's class declaration added:

            public slots:
                void setValue(int value);
            signals:
                void valueChanged(int newValue);
            

            Am I on the correct way?

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

              These lines are to be found in the class declaration.

              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
              1
              • P Offline
                P Offline
                Panoss
                wrote on last edited by
                #13

                Yes you 're right, I corrected it!

                1 Reply Last reply
                0
                • P Offline
                  P Offline
                  Panoss
                  wrote on last edited by Panoss
                  #14

                  And this is the function in my FormB: ()

                  void FormB::setValue(int value)
                  {       
                          emit valueChanged(value);   
                  }
                  

                  Correct?

                  1 Reply Last reply
                  0
                  • P Offline
                    P Offline
                    Panoss
                    wrote on last edited by Panoss
                    #15

                    And now this:

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

                    I modified it to (this code is in the constructor of FormB):

                    connect(&parent, &parent::valueChanged,
                                             this, &FormB::setValue);
                    

                    ???
                    It's wrong...The 'parent' I mean.
                    The sender is FormB...so..

                    M 1 Reply Last reply
                    0
                    • P Panoss

                      And now this:

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

                      I modified it to (this code is in the constructor of FormB):

                      connect(&parent, &parent::valueChanged,
                                               this, &FormB::setValue);
                      

                      ???
                      It's wrong...The 'parent' I mean.
                      The sender is FormB...so..

                      M Offline
                      M Offline
                      mpergand
                      wrote on last edited by mpergand
                      #16

                      @Panoss
                      Everything is upside down :)

                      let's recap, you want the main window (formA) to be inform when a value has changed in second window (formB)

                      The main window register to receive a signal from the second window.

                      In formA:

                      connect(formB, &FormB::valueChanged, this , &FormA::valueChangedInFormB);
                      
                      1 Reply Last reply
                      3
                      • P Offline
                        P Offline
                        Panoss
                        wrote on last edited by Panoss
                        #17

                        @mpergand it works!!!
                        Thank you all!

                        The actual name of FormA is 'ArticlesWindow' and of FormB 'positionsForm'.
                        (FormB is the sender)
                        I post the code in case someone needs it:

                        articleswindow.h
                        private slots:    
                            void positionChanged();
                        
                        articleswindow.cpp
                        void ArticlesWindow::positionChanged(){
                            qDebug() << "ArticlesWindow::positionChanged";
                        }
                        void ArticlesWindow::openPositionsForm(){    
                            class positionsForm *form = new class positionsForm(model, this);
                            connect(form, &positionsForm::valueChanged, this , &ArticlesWindow::positionChanged);
                        
                        

                        And:

                        positionsform.h
                          public slots:
                            void setValue(int value);
                        
                          signals:
                            void valueChanged(int newValue);
                        
                        positionsform.cpp
                         void positionsForm::setValue(int value)
                         {          
                           emit valueChanged(value);    
                         }
                        
                        
                        P 1 Reply Last reply
                        0
                        • P Panoss

                          @mpergand it works!!!
                          Thank you all!

                          The actual name of FormA is 'ArticlesWindow' and of FormB 'positionsForm'.
                          (FormB is the sender)
                          I post the code in case someone needs it:

                          articleswindow.h
                          private slots:    
                              void positionChanged();
                          
                          articleswindow.cpp
                          void ArticlesWindow::positionChanged(){
                              qDebug() << "ArticlesWindow::positionChanged";
                          }
                          void ArticlesWindow::openPositionsForm(){    
                              class positionsForm *form = new class positionsForm(model, this);
                              connect(form, &positionsForm::valueChanged, this , &ArticlesWindow::positionChanged);
                          
                          

                          And:

                          positionsform.h
                            public slots:
                              void setValue(int value);
                          
                            signals:
                              void valueChanged(int newValue);
                          
                          positionsform.cpp
                           void positionsForm::setValue(int value)
                           {          
                             emit valueChanged(value);    
                           }
                          
                          
                          P Offline
                          P Offline
                          Panoss
                          wrote on last edited by
                          #18

                          It works but the message is printed twice, like if function ArticlesWindow::positionChanged is called twice??

                          M 1 Reply Last reply
                          0
                          • P Panoss

                            It works but the message is printed twice, like if function ArticlesWindow::positionChanged is called twice??

                            M Offline
                            M Offline
                            mpergand
                            wrote on last edited by mpergand
                            #19

                            @Panoss

                            class positionsForm *form = new class positionsForm(model, this);

                            What is that ?

                            You seem to create an new instance each time openPositionsForm() is called ...

                            1 Reply Last reply
                            0
                            • P Offline
                              P Offline
                              Panoss
                              wrote on last edited by Panoss
                              #20

                              Why is this wrong?
                              Every time I want to open the form I create an instance of it 's class.
                              When I close the form the instance is destroyed, right?

                              What 's the correct way?

                              M jsulmJ JonBJ 3 Replies Last reply
                              0
                              • P Panoss

                                Why is this wrong?
                                Every time I want to open the form I create an instance of it 's class.
                                When I close the form the instance is destroyed, right?

                                What 's the correct way?

                                M Offline
                                M Offline
                                mpergand
                                wrote on last edited by mpergand
                                #21

                                @Panoss
                                Add sender() and look if it's different objects
                                qDebug() << "ArticlesWindow::positionChanged"<<sender();

                                P 1 Reply Last reply
                                0
                                • P Panoss

                                  Why is this wrong?
                                  Every time I want to open the form I create an instance of it 's class.
                                  When I close the form the instance is destroyed, right?

                                  What 's the correct way?

                                  jsulmJ Offline
                                  jsulmJ Offline
                                  jsulm
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #22

                                  @Panoss said in Example of calling a function to parent?:

                                  Every time I want to open the form I create an instance of it 's class.

                                  Do you also delete the instance when you do not need it anymore?

                                  https://forum.qt.io/topic/113070/qt-code-of-conduct

                                  M P 2 Replies Last reply
                                  1
                                  • jsulmJ jsulm

                                    @Panoss said in Example of calling a function to parent?:

                                    Every time I want to open the form I create an instance of it 's class.

                                    Do you also delete the instance when you do not need it anymore?

                                    M Offline
                                    M Offline
                                    mpergand
                                    wrote on last edited by mpergand
                                    #23

                                    @jsulm said in Example of calling a function to parent?:

                                    @Panoss said in Example of calling a function to parent?:

                                    Every time I want to open the form I create an instance of it 's class.

                                    Do you also delete the instance when you do not need it anymore?

                                    That's what @Panoss should find out for himself by looking at the sender() on multiple messages.

                                    1 Reply Last reply
                                    0
                                    • M mpergand

                                      @Panoss
                                      Add sender() and look if it's different objects
                                      qDebug() << "ArticlesWindow::positionChanged"<<sender();

                                      P Offline
                                      P Offline
                                      Panoss
                                      wrote on last edited by
                                      #24

                                      @mpergand said in Example of calling a function to parent?:

                                      @Panoss
                                      Add sender() and look if it's different objects
                                      qDebug() << "ArticlesWindow::positionChanged"<<sender();

                                      This is the output:

                                      updateParent called!!
                                      ArticlesWindow::positionChanged positionsForm(0x5de4a24160, name = "positionsForm")
                                      updateParent called!!
                                      ArticlesWindow::positionChanged positionsForm(0x5de4a24160, name = "positionsForm")
                                      
                                      1 Reply Last reply
                                      0
                                      • P Panoss

                                        Why is this wrong?
                                        Every time I want to open the form I create an instance of it 's class.
                                        When I close the form the instance is destroyed, right?

                                        What 's the correct way?

                                        JonBJ Offline
                                        JonBJ Offline
                                        JonB
                                        wrote on last edited by JonB
                                        #25

                                        @Panoss said in Example of calling a function to parent?:

                                        When I close the form the instance is destroyed, right?

                                        No, that depends on what you mean/do by "close". And we don't see that in your shown code?

                                        It works but the message is printed twice, like if function ArticlesWindow::positionChanged is called twice??

                                        Does the "twice" happen from the very first time you create the form or after a second open? Are the number calls equal to the number of times you create the form? If it stays at "twice" always, that alters what i would look for in the code.

                                        P 1 Reply Last reply
                                        1
                                        • jsulmJ jsulm

                                          @Panoss said in Example of calling a function to parent?:

                                          Every time I want to open the form I create an instance of it 's class.

                                          Do you also delete the instance when you do not need it anymore?

                                          P Offline
                                          P Offline
                                          Panoss
                                          wrote on last edited by
                                          #26

                                          @jsulm said in Example of calling a function to parent?:

                                          @Panoss said in Example of calling a function to parent?:

                                          Every time I want to open the form I create an instance of it 's class.

                                          Do you also delete the instance when you do not need it anymore?

                                          When I close the form instance (clicking on the close button or with form->close) doesn't it get deleted?

                                          e.g. with this code:

                                          void addArticle::on_cancelButton_clicked()
                                          {
                                              this->close();
                                          }
                                          
                                          JonBJ 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