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