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

Close connection qobject

Scheduled Pinned Locked Moved Solved General and Desktop
23 Posts 4 Posters 8.1k Views 1 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.
  • BjornWB BjornW

    If you want to disconnect elsewhere you need to save the connection object inside your class.

    Again, I did not compile this. But it should give you an idea.

    class MainWindow : public QMainWindow
    {
    ...
    private:
       QMetaObject::Connection m_connection;
    };
    
    ...
    
    void MainWindow::escucharMouse()
    {
          m_connection = QObject::connect(&mouselog::instance(), &mouselog::mouseEvent, [](){ });
    }
    void MainWindow::stopEscucharMouse()
    {
          QObject::disconnect(m_connection ); 
    }
    

    On a side note, today I learned that escuchar means listen. Which reminded me of the song "Equador" (by Sash) where they sing "Escuchame". Funny how things connect. And disconnect :).

    J Offline
    J Offline
    Jeronimo
    wrote on last edited by Jeronimo
    #9

    @BjornW said in Close connection qobject:

    m_connection

    thx a lot!!

    1 Reply Last reply
    1
    • BjornWB Offline
      BjornWB Offline
      BjornW
      wrote on last edited by
      #10

      Good luck :)

      J 1 Reply Last reply
      2
      • BjornWB BjornW

        Good luck :)

        J Offline
        J Offline
        Jeronimo
        wrote on last edited by
        #11

        @BjornW your help me a lot thx but i think when someone use one hook for mouse events for example it's impossible to close this connection. thx again!

        1 Reply Last reply
        1
        • BjornWB Offline
          BjornWB Offline
          BjornW
          wrote on last edited by
          #12

          Post your code please. I don't understand. It should always be possible to close the connection.

          J 2 Replies Last reply
          1
          • BjornWB BjornW

            Post your code please. I don't understand. It should always be possible to close the connection.

            J Offline
            J Offline
            Jeronimo
            wrote on last edited by
            #13

            @BjornW maybe can be because in my main window class i defined with this way
            class MainWindow : public QObject {

            }???

            mrjjM 1 Reply Last reply
            0
            • J Jeronimo

              @BjornW maybe can be because in my main window class i defined with this way
              class MainWindow : public QObject {

              }???

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

              @Jeronimo
              Actually all QWidgets are QObject too so it should not matter.

              1 Reply Last reply
              1
              • BjornWB Offline
                BjornWB Offline
                BjornW
                wrote on last edited by
                #15

                Do you inherit QMainWindow?

                class MainWindow : public QMainWindow
                
                1 Reply Last reply
                1
                • BjornWB BjornW

                  Post your code please. I don't understand. It should always be possible to close the connection.

                  J Offline
                  J Offline
                  Jeronimo
                  wrote on last edited by
                  #16

                  @BjornW i only did one function to connect:
                  void MainWindow::escucharMouse()
                  {
                  m_connection = QObject::connect(&mouselog::instance(), &mouselog::mouseEvent, { });
                  }
                  Other for close:
                  void MainWindow::stopEscucharMouse()
                  {
                  QObject::disconnect(m_connection );
                  }
                  i defined in headers:
                  class MainWindow : public QMainWindow
                  {
                  ...
                  public
                  private:
                  QMetaObject::Connection m_connection;
                  public slots:
                  void escucharMouse();
                  void apagarMouse();
                  and slots to call these functions (two buttons)
                  };

                  and in the slots i call the function one to open other to close like:

                  void MainWindow::slot1(){
                  m_connection = QObject::connect(&mouselog::instance(), &mouselog::mouseEvent, { });
                  }

                  void MainWindow::slot1(){
                  QObject::disconnect(m_connection );
                  }
                  i'm using one hook to capture the events of my mouse.
                  seems not to close connection and still capture events.

                  1 Reply Last reply
                  0
                  • BjornWB Offline
                    BjornWB Offline
                    BjornW
                    wrote on last edited by
                    #17

                    You have two definitions of slot1()?

                    J 1 Reply Last reply
                    1
                    • BjornWB BjornW

                      You have two definitions of slot1()?

                      J Offline
                      J Offline
                      Jeronimo
                      wrote on last edited by Jeronimo
                      #18

                      @BjornW i tried two different public slots like:

                      connect(&this->verMouse,SIGNAL(timeout()),this,SLOT(escucharMouse()));
                      connect(&this->verMouse,SIGNAL(timeout()),this,SLOT(stopEscucharMouse()));
                      
                      void MainWindow::escucharMouse()
                      {
                            m_connection = QObject::connect(&mouselog::instance(), &mouselog::mouseEvent, [](){ });
                      }
                      void MainWindow::stopEscucharMouse()
                      {
                            QObject::disconnect(m_connection ); 
                      }
                      

                      with headers in private for metaobject::connection and slots in public slots.

                      But now how can call one slot or other i call them for example with this way:

                      escucharMouse(); -> to connect
                      stopEscucharMouse(); -> dont listen more
                      

                      I put two different slots

                      Works to connect but to disconnect not seems to work.
                      inherit of qobject

                      1 Reply Last reply
                      0
                      • J Offline
                        J Offline
                        Jeronimo
                        wrote on last edited by
                        #19

                        i solved my problem but the connection still thx all

                        1 Reply Last reply
                        1
                        • BjornWB Offline
                          BjornWB Offline
                          BjornW
                          wrote on last edited by
                          #20

                          This does not seem right:

                          connect(&this->verMouse,SIGNAL(timeout()),this,SLOT(escucharMouse()));
                          connect(&this->verMouse,SIGNAL(timeout()),this,SLOT(stopEscucharMouse()));
                          

                          You connect the same signal. And why does "verMouse" have a a timeout? What is it?

                          Anyway, since you say you solved your problem...

                          J 2 Replies Last reply
                          1
                          • BjornWB BjornW

                            This does not seem right:

                            connect(&this->verMouse,SIGNAL(timeout()),this,SLOT(escucharMouse()));
                            connect(&this->verMouse,SIGNAL(timeout()),this,SLOT(stopEscucharMouse()));
                            

                            You connect the same signal. And why does "verMouse" have a a timeout? What is it?

                            Anyway, since you say you solved your problem...

                            J Offline
                            J Offline
                            Jeronimo
                            wrote on last edited by Jeronimo
                            #21

                            @BjornW i need to use different signals to close the connection? i put timeout because these slots will repeat each time i say. I'm interesting to solve this issue because it's very useful too.

                            1 Reply Last reply
                            0
                            • BjornWB BjornW

                              This does not seem right:

                              connect(&this->verMouse,SIGNAL(timeout()),this,SLOT(escucharMouse()));
                              connect(&this->verMouse,SIGNAL(timeout()),this,SLOT(stopEscucharMouse()));
                              

                              You connect the same signal. And why does "verMouse" have a a timeout? What is it?

                              Anyway, since you say you solved your problem...

                              J Offline
                              J Offline
                              Jeronimo
                              wrote on last edited by
                              #22

                              @BjornW verMouse.setInterval(50); with this i was trying to stop the signal verMouse.stop() documentation https://doc.qt.io/qt-4.8/qtimer.html#stop

                              1 Reply Last reply
                              0
                              • BjornWB Offline
                                BjornWB Offline
                                BjornW
                                wrote on last edited by
                                #23
                                connect(&this->verMouse,SIGNAL(timeout()),this,SLOT(escucharMouse()));
                                connect(&this->verMouse,SIGNAL(timeout()),this,SLOT(stopEscucharMouse()));
                                

                                You have connected the same signal to both escuchar/stopEscuchar! This makes no sense. The order in which the slots are called is undefined in this case.

                                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