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. Qt DoubleSpin Box value changed slot has called twice
Forum Updated to NodeBB v4.3 + New Features

Qt DoubleSpin Box value changed slot has called twice

Scheduled Pinned Locked Moved Unsolved General and Desktop
qt creatorqt 5.5c++slotsdebugger
22 Posts 6 Posters 12.2k Views 2 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.
  • S Offline
    S Offline
    Sowmiya R
    wrote on 9 Aug 2017, 07:12 last edited by
    #5

    @raven-worx

    I did't use any connect statement.
    From Qtdoublespinbox right click option , I have clicked "Go to slot " and I selected value changed(QString) signal.
    then it created slot function in CPP.

    This is how I made the connection.

    R 1 Reply Last reply 9 Aug 2017, 07:15
    0
    • S Sowmiya R
      9 Aug 2017, 07:12

      @raven-worx

      I did't use any connect statement.
      From Qtdoublespinbox right click option , I have clicked "Go to slot " and I selected value changed(QString) signal.
      then it created slot function in CPP.

      This is how I made the connection.

      R Offline
      R Offline
      raven-worx
      Moderators
      wrote on 9 Aug 2017, 07:15 last edited by
      #6

      @Sowmiya-R
      and no calls to QMetaObject::connectSlotsByName() for example?
      I don't know if this is called implicitly. But you can try to rename the slot.

      --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
      If you have a question please use the forum so others can benefit from the solution in the future

      1 Reply Last reply
      0
      • S Offline
        S Offline
        Sowmiya R
        wrote on 9 Aug 2017, 07:17 last edited by
        #7

        @raven-worx

        Can you please elaborate your answer.

        thanks,
        Sowmiya

        R 1 Reply Last reply 9 Aug 2017, 07:18
        0
        • S Sowmiya R
          9 Aug 2017, 07:17

          @raven-worx

          Can you please elaborate your answer.

          thanks,
          Sowmiya

          R Offline
          R Offline
          raven-worx
          Moderators
          wrote on 9 Aug 2017, 07:18 last edited by
          #8

          @Sowmiya-R
          simply try to rename the on_doublespinbox_valuechaged() slot

          --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
          If you have a question please use the forum so others can benefit from the solution in the future

          1 Reply Last reply
          0
          • S Offline
            S Offline
            Sowmiya R
            wrote on 9 Aug 2017, 10:44 last edited by
            #9

            @raven-worx

            I have renamed the slot and connected in following way,

            connect(ui->doubleSpinBox, SIGNAL(valueChanged(QString)), this, SLOT(doubleSpinBoxvalueChanged1(QString)));

            Now also, the slot has called twice only if I click Qt doublespinbox up/down control.

            If I press keyboard up/down key or mouse scroll up/down button, the slot has called once.

            Thanks,
            Sowmiya

            R 1 Reply Last reply 9 Aug 2017, 10:50
            0
            • S Sowmiya R
              9 Aug 2017, 10:44

              @raven-worx

              I have renamed the slot and connected in following way,

              connect(ui->doubleSpinBox, SIGNAL(valueChanged(QString)), this, SLOT(doubleSpinBoxvalueChanged1(QString)));

              Now also, the slot has called twice only if I click Qt doublespinbox up/down control.

              If I press keyboard up/down key or mouse scroll up/down button, the slot has called once.

              Thanks,
              Sowmiya

              R Offline
              R Offline
              raven-worx
              Moderators
              wrote on 9 Aug 2017, 10:50 last edited by
              #10

              @Sowmiya-R
              there must be anything in your code causing this misbehavior.
              Did you reimplement any event-handlers, event-filters, widgets, etc. in your application?

              --- SUPPORT REQUESTS VIA CHAT WILL BE IGNORED ---
              If you have a question please use the forum so others can benefit from the solution in the future

              1 Reply Last reply
              0
              • M Offline
                M Offline
                mrjj
                Lifetime Qt Champion
                wrote on 9 Aug 2017, 11:00 last edited by
                #11

                Hi
                Tried with 5.5.1 in default GUI project
                Cannot reproduce.
                alt text

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  Sowmiya R
                  wrote on 9 Aug 2017, 11:00 last edited by
                  #12

                  I have created a sample application, it contains only QtdoubleSpinbox.
                  I have not overridden any methods.

                  below is my CPP code

                  #include "mainwindow.h"
                  #include "ui_mainwindow.h"
                  #include "qdebug.h"
                  #include <qspinbox.h>
                  
                  MainWindow::MainWindow(QWidget *parent) :
                      QMainWindow(parent),
                      ui(new Ui::MainWindow)
                  {
                  
                      ui->setupUi(this);
                      connect(ui->doubleSpinBox, SIGNAL(valueChanged(QString)), this, SLOT(on_doubleSpinBox_valueChanged1(QString)));
                  }
                  
                  MainWindow::~MainWindow()
                  {
                      delete ui;
                  }
                  
                  void MainWindow::on_doubleSpinBox_valueChanged1(const QString &arg1)
                  {
                      qDebug()<<"doubleSpinBox value changed: "<<arg1;
                  }
                  
                  M 1 Reply Last reply 9 Aug 2017, 11:03
                  0
                  • S Sowmiya R
                    9 Aug 2017, 11:00

                    I have created a sample application, it contains only QtdoubleSpinbox.
                    I have not overridden any methods.

                    below is my CPP code

                    #include "mainwindow.h"
                    #include "ui_mainwindow.h"
                    #include "qdebug.h"
                    #include <qspinbox.h>
                    
                    MainWindow::MainWindow(QWidget *parent) :
                        QMainWindow(parent),
                        ui(new Ui::MainWindow)
                    {
                    
                        ui->setupUi(this);
                        connect(ui->doubleSpinBox, SIGNAL(valueChanged(QString)), this, SLOT(on_doubleSpinBox_valueChanged1(QString)));
                    }
                    
                    MainWindow::~MainWindow()
                    {
                        delete ui;
                    }
                    
                    void MainWindow::on_doubleSpinBox_valueChanged1(const QString &arg1)
                    {
                        qDebug()<<"doubleSpinBox value changed: "<<arg1;
                    }
                    
                    M Offline
                    M Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on 9 Aug 2017, 11:03 last edited by
                    #13

                    @Sowmiya-R
                    Must be something in your Qt/compiler I guess ??
                    Can you try this test
                    https://www.dropbox.com/s/9eftxqghndn2bhw/myspinbox.zip?dl=0

                    S 1 Reply Last reply 9 Aug 2017, 11:24
                    0
                    • Vinod KuntojiV Offline
                      Vinod KuntojiV Offline
                      Vinod Kuntoji
                      wrote on 9 Aug 2017, 11:12 last edited by
                      #14

                      @Sowmiya-R ,
                      Hi,
                      You can use Qt::UniqueConnection in Connect statement.

                      C++, Qt, Qt Quick Developer,
                      PthinkS, Bangalore

                      1 Reply Last reply
                      0
                      • M mrjj
                        9 Aug 2017, 11:03

                        @Sowmiya-R
                        Must be something in your Qt/compiler I guess ??
                        Can you try this test
                        https://www.dropbox.com/s/9eftxqghndn2bhw/myspinbox.zip?dl=0

                        S Offline
                        S Offline
                        Sowmiya R
                        wrote on 9 Aug 2017, 11:24 last edited by
                        #15

                        @mrjj

                        I have tested your code.

                        I am able to reproduce the same in debug mode.
                        Can you please put a break point in slot function and run it in debug mode and see.

                        M 1 Reply Last reply 9 Aug 2017, 11:41
                        0
                        • S Sowmiya R
                          9 Aug 2017, 11:24

                          @mrjj

                          I have tested your code.

                          I am able to reproduce the same in debug mode.
                          Can you please put a break point in slot function and run it in debug mode and see.

                          M Offline
                          M Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on 9 Aug 2017, 11:41 last edited by
                          #16

                          @Sowmiya-R
                          Ahh, now i see.
                          Yes the debugger seems to interfere with event loop so it does indeed call it twice on one click
                          if u place break point there. Else Not.

                          void MainWindow::on_doubleSpinBox_valueChanged(const QString &arg1)
                          {
                             static int hmm=0;
                              qDebug() << arg1;
                              hmm++;
                              qDebug() << hmm;
                          }
                          

                          "1,00"
                          1
                          "2,00"
                          2

                          I would guess that pausing it triggers the repeat feature and since it dont get an mouse release event its why.

                          1 Reply Last reply
                          0
                          • S Offline
                            S Offline
                            Sowmiya R
                            wrote on 10 Aug 2017, 05:25 last edited by
                            #17

                            I have developed a application using Qt, there regardless of debug mode or release mode value changed slot has called twice only on spinbox box up/down controls.
                            I try to reproduce the same in sample application, but its happening only in debug mode.

                            There is something missing in my application. I will check it out.
                            Thank you guys for you suggestions.

                            M 1 Reply Last reply 10 Aug 2017, 06:47
                            0
                            • S Sowmiya R
                              10 Aug 2017, 05:25

                              I have developed a application using Qt, there regardless of debug mode or release mode value changed slot has called twice only on spinbox box up/down controls.
                              I try to reproduce the same in sample application, but its happening only in debug mode.

                              There is something missing in my application. I will check it out.
                              Thank you guys for you suggestions.

                              M Offline
                              M Offline
                              mrjj
                              Lifetime Qt Champion
                              wrote on 10 Aug 2017, 06:47 last edited by
                              #18

                              @Sowmiya-R

                              But it ONLY happens for me if i set break point.
                              Never, ever else.

                              Do it happen for you if yo have NO break points ?

                              S 1 Reply Last reply 10 Aug 2017, 07:28
                              0
                              • M mrjj
                                10 Aug 2017, 06:47

                                @Sowmiya-R

                                But it ONLY happens for me if i set break point.
                                Never, ever else.

                                Do it happen for you if yo have NO break points ?

                                S Offline
                                S Offline
                                Sowmiya R
                                wrote on 10 Aug 2017, 07:28 last edited by
                                #19

                                @mrjj

                                yeah!

                                Without break point also its calling twice.

                                M 1 Reply Last reply 10 Aug 2017, 08:16
                                0
                                • S Sowmiya R
                                  10 Aug 2017, 07:28

                                  @mrjj

                                  yeah!

                                  Without break point also its calling twice.

                                  M Offline
                                  M Offline
                                  mrjj
                                  Lifetime Qt Champion
                                  wrote on 10 Aug 2017, 08:16 last edited by
                                  #20

                                  @Sowmiya-R
                                  Ok, that does not happen for me.
                                  Without break point it works correctly here.

                                  I have no idea what could be wrong with your Qt.

                                  Since you are using a clean project to test, i assume is something with your pc or Qt.

                                  1 Reply Last reply
                                  0
                                  • W Offline
                                    W Offline
                                    Wael11
                                    wrote on 22 Dec 2020, 09:59 last edited by
                                    #21

                                    The double call to slot happened in my case only with a breakpoint in the slot function, otherwise it is called once only. The second call was triggered by a timer event

                                    JonBJ 1 Reply Last reply 22 Dec 2020, 10:41
                                    0
                                    • W Wael11
                                      22 Dec 2020, 09:59

                                      The double call to slot happened in my case only with a breakpoint in the slot function, otherwise it is called once only. The second call was triggered by a timer event

                                      JonBJ Offline
                                      JonBJ Offline
                                      JonB
                                      wrote on 22 Dec 2020, 10:41 last edited by JonB
                                      #22

                                      @Wael11
                                      For anyone reading this: This is known behaviour, which I stumbled across a long time ago and it was infuriating.

                                      With a QSpinbox Qt Internal code uses a timer on clicks/presses. If you step through in debugger you exceed the timeout and get bad/double behaviour.

                                      Simplest: change all connect() to QSpinbox click/key to pass Qt::QueuedConnection as last parameter for connection type, not default Qt::DirectConnection. Now you can use debugger breakpoints and all will be well. I wrote a method to connect all my spinboxes like this.

                                      1 Reply Last reply
                                      4

                                      • Login

                                      • Login or register to search.
                                      • First post
                                        Last post
                                      0
                                      • Categories
                                      • Recent
                                      • Tags
                                      • Popular
                                      • Users
                                      • Groups
                                      • Search
                                      • Get Qt Extensions
                                      • Unsolved