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.0k 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