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
Qt 6.11 is out! See what's new in the release blog

Close connection qobject

Scheduled Pinned Locked Moved Solved General and Desktop
23 Posts 4 Posters 15.4k 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

    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