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 13.9k 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 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;
    }
    
    mrjjM 1 Reply Last reply
    0
    • S Sowmiya R

      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;
      }
      
      mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on 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
      0
      • Vinod KuntojiV Offline
        Vinod KuntojiV Offline
        Vinod Kuntoji
        wrote on 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
        • mrjjM mrjj

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

          mrjjM 1 Reply Last reply
          0
          • S Sowmiya R

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

            mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on 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 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.

              mrjjM 1 Reply Last reply
              0
              • S Sowmiya R

                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.

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on 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
                0
                • mrjjM mrjj

                  @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 last edited by
                  #19

                  @mrjj

                  yeah!

                  Without break point also its calling twice.

                  mrjjM 1 Reply Last reply
                  0
                  • S Sowmiya R

                    @mrjj

                    yeah!

                    Without break point also its calling twice.

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on 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 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
                      0
                      • W Wael11

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