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

    @raven-worx

    Can you please elaborate your answer.

    thanks,
    Sowmiya

    raven-worxR Offline
    raven-worxR Offline
    raven-worx
    Moderators
    wrote on 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 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

      raven-worxR 1 Reply Last reply
      0
      • 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 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