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. Connecting to slot by string name
Forum Update on Monday, May 27th 2025

Connecting to slot by string name

Scheduled Pinned Locked Moved Solved General and Desktop
18 Posts 7 Posters 6.8k Views
  • 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 Offline
    P Offline
    poor_robert
    wrote on last edited by
    #1

    Hello I have following code:

    namespace Ui {
    class MainWindow;
    }
    
    class MainWindow : public QMainWindow
    {
    	Q_OBJECT
    
    public:
    	explicit MainWindow(QWidget *parent = 0);
    	~MainWindow();
    
    signals:
    	void testSignal();
    
    public slots:
    	void testSlot();
    
    private:
    	Ui::MainWindow *ui;
    };
    
    MainWindow::MainWindow(QWidget *parent) :
    	QMainWindow(parent),
    	ui(new Ui::MainWindow)
    {
    	ui->setupUi(this);
    
    	bool result = false;
    	result = connect(this, SIGNAL(testSignal()), this, SLOT("testSlot()"));
    	qDebug() << result;
    }
    
    MainWindow::~MainWindow()
    {
    	delete ui;
    }
    
    void MainWindow::testSlot()
    {
    
    }
    
    

    but when I ran it I get:

    QObject::connect: No such slot MainWindow::"testSlot()" in ../connections/MainWindow.cpp:14
    QObject::connect: (sender name: 'MainWindow')
    QObject::connect: (receiver name: 'MainWindow')
    false

    Can you tell me how to properly connect to the slot by its string name? I know hot to use signal and slots but I have no idea how to force it work with the slot name passed by name.

    BR,
    poorBob

    m.sueM 1 Reply Last reply
    0
    • P poor_robert

      Hello I have following code:

      namespace Ui {
      class MainWindow;
      }
      
      class MainWindow : public QMainWindow
      {
      	Q_OBJECT
      
      public:
      	explicit MainWindow(QWidget *parent = 0);
      	~MainWindow();
      
      signals:
      	void testSignal();
      
      public slots:
      	void testSlot();
      
      private:
      	Ui::MainWindow *ui;
      };
      
      MainWindow::MainWindow(QWidget *parent) :
      	QMainWindow(parent),
      	ui(new Ui::MainWindow)
      {
      	ui->setupUi(this);
      
      	bool result = false;
      	result = connect(this, SIGNAL(testSignal()), this, SLOT("testSlot()"));
      	qDebug() << result;
      }
      
      MainWindow::~MainWindow()
      {
      	delete ui;
      }
      
      void MainWindow::testSlot()
      {
      
      }
      
      

      but when I ran it I get:

      QObject::connect: No such slot MainWindow::"testSlot()" in ../connections/MainWindow.cpp:14
      QObject::connect: (sender name: 'MainWindow')
      QObject::connect: (receiver name: 'MainWindow')
      false

      Can you tell me how to properly connect to the slot by its string name? I know hot to use signal and slots but I have no idea how to force it work with the slot name passed by name.

      BR,
      poorBob

      m.sueM Offline
      m.sueM Offline
      m.sue
      wrote on last edited by
      #2

      Hi @poor_robert

      The problem is the namespace you use. Remove it and it will work.

      -Michael.

      1 Reply Last reply
      0
      • P Offline
        P Offline
        poor_robert
        wrote on last edited by poor_robert
        #3

        Hello @m-sue ,

        which namespace? MainWindow? How to remove it then?

        m.sueM 1 Reply Last reply
        0
        • artwawA Offline
          artwawA Offline
          artwaw
          wrote on last edited by
          #4

          @poor_robert said in Connecting to slot by string name:

          SLOT("testSlot()"));

          Should be SLOT(testSlot())); methinks.

          For more information please re-read.

          Kind Regards,
          Artur

          1 Reply Last reply
          5
          • P poor_robert

            Hello @m-sue ,

            which namespace? MainWindow? How to remove it then?

            m.sueM Offline
            m.sueM Offline
            m.sue
            wrote on last edited by
            #5

            Hi @poor_robert

            This one:

            namespace Ui {
            class MainWindow;
            }
            

            -Michael.

            1 Reply Last reply
            0
            • P Offline
              P Offline
              poor_robert
              wrote on last edited by
              #6

              @artwaw
              of course you're right, but in this case I want to know how to connect with slot name in parenthesis so SLOT("testSlot()")); is exactly what I want to try.

              @m-sue :
              I have simplified the code:

              class MainWindow : public QObject
              {
              	Q_OBJECT
              
              public:
              	explicit MainWindow(QObject *parent = 0);
              	~MainWindow();
              
              signals:
              	void testSignal();
              
              public slots:
              	void testSlot();
              };
              
              
              #include "MainWindow.h"
              
              #include <QDebug>
              
              MainWindow::MainWindow(QObject *parent)
              {
              	bool result = false;
              	result = connect(this, SIGNAL(testSignal()), this, SLOT("testSlot()"));
              	qDebug() << result;
              }
              
              MainWindow::~MainWindow()
              {
              }
              
              void MainWindow::testSlot()
              {
              
              }
              
              

              but I still receive:
              QObject::connect: No such slot MainWindow::"testSlot()" in ../connections/MainWindow.cpp:8
              false

              Do you have any ideas?

              artwawA jsulmJ 2 Replies Last reply
              0
              • Pradeep KumarP Offline
                Pradeep KumarP Offline
                Pradeep Kumar
                wrote on last edited by Pradeep Kumar
                #7

                Hi,

                @poor_robert , as told by @artwaw change the connect statement , u cannot
                provide the function name in quotes.

                Both signal and slot function signature has to match.

                Thanks,

                Pradeep Kumar
                Qt,QML Developer

                1 Reply Last reply
                0
                • Pradeep KumarP Offline
                  Pradeep KumarP Offline
                  Pradeep Kumar
                  wrote on last edited by
                  #8

                  result = connect(this, SIGNAL(testSignal()), this, SLOT(testSlot()));

                  replace the above line and check.

                  Thanks,

                  Pradeep Kumar
                  Qt,QML Developer

                  1 Reply Last reply
                  5
                  • P poor_robert

                    @artwaw
                    of course you're right, but in this case I want to know how to connect with slot name in parenthesis so SLOT("testSlot()")); is exactly what I want to try.

                    @m-sue :
                    I have simplified the code:

                    class MainWindow : public QObject
                    {
                    	Q_OBJECT
                    
                    public:
                    	explicit MainWindow(QObject *parent = 0);
                    	~MainWindow();
                    
                    signals:
                    	void testSignal();
                    
                    public slots:
                    	void testSlot();
                    };
                    
                    
                    #include "MainWindow.h"
                    
                    #include <QDebug>
                    
                    MainWindow::MainWindow(QObject *parent)
                    {
                    	bool result = false;
                    	result = connect(this, SIGNAL(testSignal()), this, SLOT("testSlot()"));
                    	qDebug() << result;
                    }
                    
                    MainWindow::~MainWindow()
                    {
                    }
                    
                    void MainWindow::testSlot()
                    {
                    
                    }
                    
                    

                    but I still receive:
                    QObject::connect: No such slot MainWindow::"testSlot()" in ../connections/MainWindow.cpp:8
                    false

                    Do you have any ideas?

                    artwawA Offline
                    artwawA Offline
                    artwaw
                    wrote on last edited by
                    #9

                    @poor_robert said in Connecting to slot by string name:

                    of course you're right, but in this case I want to know how to connect with slot name in parenthesis so SLOT("testSlot()")); is exactly what I want to try.

                    Of course I may be wrong and I would welcome an opinion from someone more advanced in the subject but according to my knowledge this will not work at all.

                    For more information please re-read.

                    Kind Regards,
                    Artur

                    1 Reply Last reply
                    1
                    • P poor_robert

                      @artwaw
                      of course you're right, but in this case I want to know how to connect with slot name in parenthesis so SLOT("testSlot()")); is exactly what I want to try.

                      @m-sue :
                      I have simplified the code:

                      class MainWindow : public QObject
                      {
                      	Q_OBJECT
                      
                      public:
                      	explicit MainWindow(QObject *parent = 0);
                      	~MainWindow();
                      
                      signals:
                      	void testSignal();
                      
                      public slots:
                      	void testSlot();
                      };
                      
                      
                      #include "MainWindow.h"
                      
                      #include <QDebug>
                      
                      MainWindow::MainWindow(QObject *parent)
                      {
                      	bool result = false;
                      	result = connect(this, SIGNAL(testSignal()), this, SLOT("testSlot()"));
                      	qDebug() << result;
                      }
                      
                      MainWindow::~MainWindow()
                      {
                      }
                      
                      void MainWindow::testSlot()
                      {
                      
                      }
                      
                      

                      but I still receive:
                      QObject::connect: No such slot MainWindow::"testSlot()" in ../connections/MainWindow.cpp:8
                      false

                      Do you have any ideas?

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

                      @poor_robert said in Connecting to slot by string name:

                      I want to know how to connect with slot name in parenthesis so SLOT("testSlot()"));

                      Why? Why do you want to use "?

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

                      mrjjM 1 Reply Last reply
                      3
                      • jsulmJ jsulm

                        @poor_robert said in Connecting to slot by string name:

                        I want to know how to connect with slot name in parenthesis so SLOT("testSlot()"));

                        Why? Why do you want to use "?

                        mrjjM Offline
                        mrjjM Offline
                        mrjj
                        Lifetime Qt Champion
                        wrote on last edited by mrjj
                        #11

                        Hi
                        the SLOT macro converts the function name to a string and hence using a string will not be converted correctly.

                        # define SLOT(a)     qFlagLocation("1"#a QLOCATION)
                        

                        And to add to @jsulm , why you want as string anyway ??

                        1 Reply Last reply
                        2
                        • P Offline
                          P Offline
                          poor_robert
                          wrote on last edited by
                          #12

                          Hello @jsulm and @mrjj

                          The code given above was just an example. The real reason was to use slot as callback. I have created following method and wanted to do following connection:

                          void MyClass::setCallback(QObject * obj, const char* slotName)
                          {
                              connect(m_member, SIGNAL(updated()), obj, SLOT(slotName));
                          }
                          

                          in my implementation obj is class derived from the QObject. I have solved the problem with help of std::function used as callbacks.
                          Do you know how to solve this in Qt way?

                          m.sueM jsulmJ 2 Replies Last reply
                          0
                          • BjornWB Offline
                            BjornWB Offline
                            BjornW
                            wrote on last edited by BjornW
                            #13

                            I do not know if you can make that work; I doubt it.

                            Regardless, I think it is a bad idea :). How do you intend to use this? Why? If you retrace your steps a bit and explain what you are doing you may get a good suggestion out of this, I think!

                            1 Reply Last reply
                            1
                            • P poor_robert

                              Hello @jsulm and @mrjj

                              The code given above was just an example. The real reason was to use slot as callback. I have created following method and wanted to do following connection:

                              void MyClass::setCallback(QObject * obj, const char* slotName)
                              {
                                  connect(m_member, SIGNAL(updated()), obj, SLOT(slotName));
                              }
                              

                              in my implementation obj is class derived from the QObject. I have solved the problem with help of std::function used as callbacks.
                              Do you know how to solve this in Qt way?

                              m.sueM Offline
                              m.sueM Offline
                              m.sue
                              wrote on last edited by m.sue
                              #14

                              @poor_robert said in Connecting to slot by string name:

                              Just use the SLOT at the place where you call the function:

                              void MyClass::setCallback(QObject * obj, const char* slotName)
                              {
                                  connect(m_member, SIGNAL(updated()), obj, slotName);
                              }
                              
                              setCallback(myObj,SLOT(myFunction()));
                              

                              -Michael.

                              jsulmJ 1 Reply Last reply
                              5
                              • P poor_robert

                                Hello @jsulm and @mrjj

                                The code given above was just an example. The real reason was to use slot as callback. I have created following method and wanted to do following connection:

                                void MyClass::setCallback(QObject * obj, const char* slotName)
                                {
                                    connect(m_member, SIGNAL(updated()), obj, SLOT(slotName));
                                }
                                

                                in my implementation obj is class derived from the QObject. I have solved the problem with help of std::function used as callbacks.
                                Do you know how to solve this in Qt way?

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

                                @poor_robert Just pass SLOT(mySlot()) to setCallback :-)

                                void MyClass::setCallback(QObject * obj, const char* slotStr)
                                {
                                    connect(m_member, SIGNAL(updated()), obj, slotStr);
                                }
                                
                                setCallback(obj, SLOT(mySlot()));
                                

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

                                1 Reply Last reply
                                5
                                • m.sueM m.sue

                                  @poor_robert said in Connecting to slot by string name:

                                  Just use the SLOT at the place where you call the function:

                                  void MyClass::setCallback(QObject * obj, const char* slotName)
                                  {
                                      connect(m_member, SIGNAL(updated()), obj, slotName);
                                  }
                                  
                                  setCallback(myObj,SLOT(myFunction()));
                                  

                                  -Michael.

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

                                  @m.sue You were faster :-)

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

                                  m.sueM 1 Reply Last reply
                                  0
                                  • jsulmJ jsulm

                                    @m.sue You were faster :-)

                                    m.sueM Offline
                                    m.sueM Offline
                                    m.sue
                                    wrote on last edited by
                                    #17

                                    Hi @jsulm

                                    Just seconds :-)

                                    1 Reply Last reply
                                    1
                                    • P Offline
                                      P Offline
                                      poor_robert
                                      wrote on last edited by
                                      #18

                                      Hello @jsulm and @m-sue

                                      This did the job :). Thanks for the help!

                                      1 Reply Last reply
                                      1

                                      • Login

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