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. how to connect a signal from one class to a slot in another class ?
Forum Updated to NodeBB v4.3 + New Features

how to connect a signal from one class to a slot in another class ?

Scheduled Pinned Locked Moved Unsolved General and Desktop
qtconnectivityqt5.15.2
11 Posts 4 Posters 1.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.
  • P Prakash08

    I have two classes MainWindow & Model. My goal is to connet the emit() signal from MainWindow class to came_here() slot in Model class.

    //signal from MainWindow calss 
    
    signals:
        void eject();
    
    Model mod;
    
    connect(ui->pushButton,&QPushButton::clicked,this, &MainWindow::go_there);
    
    //connect function 
    QObject::connect(this,&MainWindow::eject,&mod,&Model::came_here);
    
    //slot which emits the signal from MainWindow class
    private slots:
    void MainWindow::go_there()
    {
        qDebug()<<"go there method executed ..";
        emit eject();
    }
    
    //slot in Model class 
    public slots:
    void Model::came_here()
    {
        qDebug()<<"Hi from Model class :)";
    }
    
    sierdzioS Offline
    sierdzioS Offline
    sierdzio
    Moderators
    wrote on last edited by
    #2

    @Prakash08 your code looks ok, although you seem to have mixed code from header file and source file.

    You can simplify this by connecting the signal from push button directly to your model:

    connect(ui->pushButton, &QPushButton::clicked, &mod, &Model::came_here);
    

    So, to sum up. This should be in header file (.h):

    signals:
        void eject();
    
    Model mod;
    

    And this in source file (.cpp), preferably somewhere early like in the constructor of your main window:

    connect(ui->pushButton, &QPushButton::clicked, &mod, &Model::came_here);
    

    (Z(:^

    P 1 Reply Last reply
    1
    • sierdzioS sierdzio

      @Prakash08 your code looks ok, although you seem to have mixed code from header file and source file.

      You can simplify this by connecting the signal from push button directly to your model:

      connect(ui->pushButton, &QPushButton::clicked, &mod, &Model::came_here);
      

      So, to sum up. This should be in header file (.h):

      signals:
          void eject();
      
      Model mod;
      

      And this in source file (.cpp), preferably somewhere early like in the constructor of your main window:

      connect(ui->pushButton, &QPushButton::clicked, &mod, &Model::came_here);
      
      P Offline
      P Offline
      Prakash08
      wrote on last edited by
      #3

      @sierdzio thank you, it worked. but if i want to connect a custom signal to slot from other class is that possible ?

      jsulmJ 1 Reply Last reply
      0
      • P Prakash08

        @sierdzio thank you, it worked. but if i want to connect a custom signal to slot from other class is that possible ?

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

        @Prakash08 said in how to connect a signal from one class to a slot in another class ?:

        but if i want to connect a custom signal to slot from other class is that possible ?

        Of course it is possible, why should it not be possible?
        It doesn't matter whether the signal is your own custom signal...

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

        P 1 Reply Last reply
        0
        • jsulmJ jsulm

          @Prakash08 said in how to connect a signal from one class to a slot in another class ?:

          but if i want to connect a custom signal to slot from other class is that possible ?

          Of course it is possible, why should it not be possible?
          It doesn't matter whether the signal is your own custom signal...

          P Offline
          P Offline
          Prakash08
          wrote on last edited by
          #5

          @jsulm And how to code that ?

          J.HilkJ jsulmJ 2 Replies Last reply
          0
          • P Prakash08

            @jsulm And how to code that ?

            J.HilkJ Offline
            J.HilkJ Offline
            J.Hilk
            Moderators
            wrote on last edited by
            #6

            @Prakash08 let me chatgpt that for you:

            To connect a custom signal from one class to a slot in another class, you can follow a similar approach as you did with the built-in signals and slots. Here's how you can do it:

            In the header file of the class containing the custom signal (let's call it SenderClass), declare the custom signal:

            class SenderClass : public QObject
            {
               Q_OBJECT
            
            signals:
               void customSignal();
            };
            

            In the header file of the class containing the slot (let's call it ReceiverClass), declare the slot:

            class ReceiverClass : public QObject
            {
               Q_OBJECT
            
            public slots:
               void customSlot();
            };
            

            Then, in the implementation file of the ReceiverClass, define the custom slot:

            #include "receiverclass.h" // Include the header file of ReceiverClass
            
            void ReceiverClass::customSlot()
            {
               qDebug() << "Custom slot executed";
            }
            

            Finally, connect the custom signal to the slot in your code:

            SenderClass sender;
            ReceiverClass receiver;
            
            // Connect the custom signal from SenderClass to the custom slot in ReceiverClass
            QObject::connect(&sender, &SenderClass::customSignal, &receiver, &ReceiverClass::customSlot);
            
            // Emit the custom signal from SenderClass
            emit sender.customSignal();
            

            With this setup, when the custom signal customSignal() is emitted from an instance of SenderClass, the slot customSlot() in an instance of ReceiverClass will be executed. Make sure to include the necessary header files and namespaces in your actual implementation.


            Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


            Q: What's that?
            A: It's blue light.
            Q: What does it do?
            A: It turns blue.

            P 1 Reply Last reply
            0
            • P Prakash08

              @jsulm And how to code that ?

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

              @Prakash08 said in how to connect a signal from one class to a slot in another class ?:

              And how to code that ?

              In exact same way.
              What is the problem you face?

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

              1 Reply Last reply
              0
              • J.HilkJ J.Hilk

                @Prakash08 let me chatgpt that for you:

                To connect a custom signal from one class to a slot in another class, you can follow a similar approach as you did with the built-in signals and slots. Here's how you can do it:

                In the header file of the class containing the custom signal (let's call it SenderClass), declare the custom signal:

                class SenderClass : public QObject
                {
                   Q_OBJECT
                
                signals:
                   void customSignal();
                };
                

                In the header file of the class containing the slot (let's call it ReceiverClass), declare the slot:

                class ReceiverClass : public QObject
                {
                   Q_OBJECT
                
                public slots:
                   void customSlot();
                };
                

                Then, in the implementation file of the ReceiverClass, define the custom slot:

                #include "receiverclass.h" // Include the header file of ReceiverClass
                
                void ReceiverClass::customSlot()
                {
                   qDebug() << "Custom slot executed";
                }
                

                Finally, connect the custom signal to the slot in your code:

                SenderClass sender;
                ReceiverClass receiver;
                
                // Connect the custom signal from SenderClass to the custom slot in ReceiverClass
                QObject::connect(&sender, &SenderClass::customSignal, &receiver, &ReceiverClass::customSlot);
                
                // Emit the custom signal from SenderClass
                emit sender.customSignal();
                

                With this setup, when the custom signal customSignal() is emitted from an instance of SenderClass, the slot customSlot() in an instance of ReceiverClass will be executed. Make sure to include the necessary header files and namespaces in your actual implementation.

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

                @J-Hilk said in how to connect a signal from one class to a slot in another class ?:

                SenderClass sender;
                ReceiverClass receiver;

                // Connect the custom signal from SenderClass to the custom slot in ReceiverClass
                QObject::connect(&sender, &SenderClass::customSignal, &receiver, &ReceiverClass::customSlot);

                // Emit the custom signal from SenderClass
                emit sender.customSignal();

                in which file these lines to be written ?

                jsulmJ J.HilkJ 2 Replies Last reply
                0
                • P Prakash08

                  @J-Hilk said in how to connect a signal from one class to a slot in another class ?:

                  SenderClass sender;
                  ReceiverClass receiver;

                  // Connect the custom signal from SenderClass to the custom slot in ReceiverClass
                  QObject::connect(&sender, &SenderClass::customSignal, &receiver, &ReceiverClass::customSlot);

                  // Emit the custom signal from SenderClass
                  emit sender.customSignal();

                  in which file these lines to be written ?

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

                  @Prakash08 Emit should be clear, right? You emit a signal where you want/need to emit it. Usually sender class is emitting its signal.
                  First two lines: whereever you need these classes. connect() - put it where you have access to both, sender and receiver.

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

                  1 Reply Last reply
                  0
                  • P Prakash08

                    @J-Hilk said in how to connect a signal from one class to a slot in another class ?:

                    SenderClass sender;
                    ReceiverClass receiver;

                    // Connect the custom signal from SenderClass to the custom slot in ReceiverClass
                    QObject::connect(&sender, &SenderClass::customSignal, &receiver, &ReceiverClass::customSlot);

                    // Emit the custom signal from SenderClass
                    emit sender.customSignal();

                    in which file these lines to be written ?

                    J.HilkJ Offline
                    J.HilkJ Offline
                    J.Hilk
                    Moderators
                    wrote on last edited by
                    #10

                    @Prakash08 my friend you need to pick up some courses on c++ and qt this is as basic as it gets

                    // SenderClass.h
                    #ifndef SENDERCLASS_H
                    #define SENDERCLASS_H
                    
                    #include <QObject>
                    
                    class SenderClass : public QObject
                    {
                        Q_OBJECT
                    
                    public:
                        explicit SenderClass(QObject *parent = nullptr);
                    
                    signals:
                        void customSignal();
                    };
                    
                    #endif // SENDERCLASS_H
                    
                    // SenderClass.cpp
                    #include "SenderClass.h"
                    
                    SenderClass::SenderClass(QObject *parent) : QObject(parent)
                    {
                    
                    }
                    
                    // ReceiverClass.h
                    #ifndef RECEIVERCLASS_H
                    #define RECEIVERCLASS_H
                    
                    #include <QObject>
                    #include <QDebug>
                    
                    class ReceiverClass : public QObject
                    {
                        Q_OBJECT
                    
                    public:
                        explicit ReceiverClass(QObject *parent = nullptr);
                    
                    public slots:
                        void customSlot();
                    };
                    
                    #endif // RECEIVERCLASS_H
                    
                    // ReceiverClass.cpp
                    #include "ReceiverClass.h"
                    
                    ReceiverClass::ReceiverClass(QObject *parent) : QObject(parent)
                    {
                    
                    }
                    
                    void ReceiverClass::customSlot()
                    {
                        qDebug() << "Custom slot executed";
                    }
                    
                    // main.cpp
                    #include <QCoreApplication>
                    #include "SenderClass.h"
                    #include "ReceiverClass.h"
                    
                    int main(int argc, char *argv[])
                    {
                        QCoreApplication a(argc, argv);
                    
                        SenderClass sender;
                        ReceiverClass receiver;
                    
                        // Connect the custom signal from SenderClass to the custom slot in ReceiverClass
                        QObject::connect(&sender, &SenderClass::customSignal, &receiver, &ReceiverClass::customSlot);
                    
                        // Emit the custom signal from SenderClass
                        emit sender.customSignal();
                    
                        return a.exec();
                    }
                    

                    Be aware of the Qt Code of Conduct, when posting : https://forum.qt.io/topic/113070/qt-code-of-conduct


                    Q: What's that?
                    A: It's blue light.
                    Q: What does it do?
                    A: It turns blue.

                    P 1 Reply Last reply
                    2
                    • J.HilkJ J.Hilk

                      @Prakash08 my friend you need to pick up some courses on c++ and qt this is as basic as it gets

                      // SenderClass.h
                      #ifndef SENDERCLASS_H
                      #define SENDERCLASS_H
                      
                      #include <QObject>
                      
                      class SenderClass : public QObject
                      {
                          Q_OBJECT
                      
                      public:
                          explicit SenderClass(QObject *parent = nullptr);
                      
                      signals:
                          void customSignal();
                      };
                      
                      #endif // SENDERCLASS_H
                      
                      // SenderClass.cpp
                      #include "SenderClass.h"
                      
                      SenderClass::SenderClass(QObject *parent) : QObject(parent)
                      {
                      
                      }
                      
                      // ReceiverClass.h
                      #ifndef RECEIVERCLASS_H
                      #define RECEIVERCLASS_H
                      
                      #include <QObject>
                      #include <QDebug>
                      
                      class ReceiverClass : public QObject
                      {
                          Q_OBJECT
                      
                      public:
                          explicit ReceiverClass(QObject *parent = nullptr);
                      
                      public slots:
                          void customSlot();
                      };
                      
                      #endif // RECEIVERCLASS_H
                      
                      // ReceiverClass.cpp
                      #include "ReceiverClass.h"
                      
                      ReceiverClass::ReceiverClass(QObject *parent) : QObject(parent)
                      {
                      
                      }
                      
                      void ReceiverClass::customSlot()
                      {
                          qDebug() << "Custom slot executed";
                      }
                      
                      // main.cpp
                      #include <QCoreApplication>
                      #include "SenderClass.h"
                      #include "ReceiverClass.h"
                      
                      int main(int argc, char *argv[])
                      {
                          QCoreApplication a(argc, argv);
                      
                          SenderClass sender;
                          ReceiverClass receiver;
                      
                          // Connect the custom signal from SenderClass to the custom slot in ReceiverClass
                          QObject::connect(&sender, &SenderClass::customSignal, &receiver, &ReceiverClass::customSlot);
                      
                          // Emit the custom signal from SenderClass
                          emit sender.customSignal();
                      
                          return a.exec();
                      }
                      
                      P Offline
                      P Offline
                      Prakash08
                      wrote on last edited by
                      #11

                      @J-Hilk yeah, thank you !

                      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