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

Connecting to slot by string name

Scheduled Pinned Locked Moved Solved General and Desktop
18 Posts 7 Posters 7.3k 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.
  • 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