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.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 Sowmiya R

    @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

    raven-worxR Offline
    raven-worxR Offline
    raven-worx
    Moderators
    wrote on 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
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on 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 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 Online
                            JonBJ Online
                            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