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. QTimer doesn't work the expected way
Forum Updated to NodeBB v4.3 + New Features

QTimer doesn't work the expected way

Scheduled Pinned Locked Moved Solved General and Desktop
29 Posts 4 Posters 1.9k 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.
  • M MasterBlade

    Hi I have a save button. I want to make it so that when a user clicks it, it gets disabled immediately and a text saying 'Saved." appears. The text disappears after 750 ms. So I coded it like this.

    But after running the program, I found that it actually worked this way.
    The program pauses for 750 ms. After that the save button gets disabled and the text blinks for a moment.
    What's the problem?

    ui->Save->setEnabled(false);
    ui->saved->show();
    QTimer::singleShot(750, [=](){ui->saved->hide();});
    
    jsulmJ Offline
    jsulmJ Offline
    jsulm
    Lifetime Qt Champion
    wrote on last edited by
    #2

    @MasterBlade said in QTimer doesn't work the expected way:

    The program pauses for 750 ms.

    I would say you need to post more of your code. singleShot should not block your app.

    https://forum.qt.io/topic/113070/qt-code-of-conduct

    M 1 Reply Last reply
    0
    • jsulmJ jsulm

      @MasterBlade said in QTimer doesn't work the expected way:

      The program pauses for 750 ms.

      I would say you need to post more of your code. singleShot should not block your app.

      M Offline
      M Offline
      MasterBlade
      wrote on last edited by
      #3

      @jsulm said in QTimer doesn't work the expected way:

      @MasterBlade said in QTimer doesn't work the expected way:

      The program pauses for 750 ms.

      I would say you need to post more of your code. singleShot should not block your app.

      I think you are correct. I commented all other codes and the program worked as expected.
      But I didn't find any problems with those commented codes. I can post them here. They are mainly used to write INI files.

      void Database::on_Save_clicked()
      {
          if (ui->Numbers->property("no1").toInt() == 0){
              qDebug() << "Trying to Save an Empty Card on_Save_clicked().";
              return;
          }
          QSettings set("*PATH*", QSettings::IniFormat);
          set.beginGroup(ui->Numbers->text());
      
          set.setValue("no1", ui->Numbers->property("no1"));
          /* All are setValue() */
          set.setValue("Type", ui->Types->text());
      
          QStringList sublist = ui->Types->property("SubList").toStringList();
          if (sublist.size() < 2){
              set.setValue("SubList", "");
          }
          else{
              set.setValue("SubList", ui->Types->property("SubList"));
          }
          UpdateTypes();
      
          set.setValue("Cost", ui->cost_value->text());
          /* All are setValue() */
          set.setValue("ResComm", ui->Restrictions->property("Comm").toInt());
      
          set.endGroup();
      
          ui->Save->setEnabled(false);
          ui->saved->show();
          QTimer::singleShot(750, [=]{ui->saved->hide();});
      }
      
      jsulmJ 1 Reply Last reply
      0
      • M MasterBlade

        @jsulm said in QTimer doesn't work the expected way:

        @MasterBlade said in QTimer doesn't work the expected way:

        The program pauses for 750 ms.

        I would say you need to post more of your code. singleShot should not block your app.

        I think you are correct. I commented all other codes and the program worked as expected.
        But I didn't find any problems with those commented codes. I can post them here. They are mainly used to write INI files.

        void Database::on_Save_clicked()
        {
            if (ui->Numbers->property("no1").toInt() == 0){
                qDebug() << "Trying to Save an Empty Card on_Save_clicked().";
                return;
            }
            QSettings set("*PATH*", QSettings::IniFormat);
            set.beginGroup(ui->Numbers->text());
        
            set.setValue("no1", ui->Numbers->property("no1"));
            /* All are setValue() */
            set.setValue("Type", ui->Types->text());
        
            QStringList sublist = ui->Types->property("SubList").toStringList();
            if (sublist.size() < 2){
                set.setValue("SubList", "");
            }
            else{
                set.setValue("SubList", ui->Types->property("SubList"));
            }
            UpdateTypes();
        
            set.setValue("Cost", ui->cost_value->text());
            /* All are setValue() */
            set.setValue("ResComm", ui->Restrictions->property("Comm").toInt());
        
            set.endGroup();
        
            ui->Save->setEnabled(false);
            ui->saved->show();
            QTimer::singleShot(750, [=]{ui->saved->hide();});
        }
        
        jsulmJ Offline
        jsulmJ Offline
        jsulm
        Lifetime Qt Champion
        wrote on last edited by
        #4

        @MasterBlade said in QTimer doesn't work the expected way:

        UpdateTypes();

        What does this do?

        https://forum.qt.io/topic/113070/qt-code-of-conduct

        M 2 Replies Last reply
        0
        • jsulmJ jsulm

          @MasterBlade said in QTimer doesn't work the expected way:

          UpdateTypes();

          What does this do?

          M Offline
          M Offline
          MasterBlade
          wrote on last edited by
          #5

          @jsulm said in QTimer doesn't work the expected way:

          @MasterBlade said in QTimer doesn't work the expected way:

          UpdateTypes();

          What does this do?

          It is used to collect some info from the ui and update a QPushButton. I tried to comment it only and The program still got blocked.

          1 Reply Last reply
          0
          • jsulmJ jsulm

            @MasterBlade said in QTimer doesn't work the expected way:

            UpdateTypes();

            What does this do?

            M Offline
            M Offline
            MasterBlade
            wrote on last edited by
            #6

            @jsulm said in QTimer doesn't work the expected way:

            @MasterBlade said in QTimer doesn't work the expected way:

            UpdateTypes();

            What does this do?

            In case you really need to check this. It looks like this.

            void Database::UpdateTypes()
            {
                bool IScroll, NScroll;
                /* other bool variables */
                QString str;
            
                IScroll = ui->Types->property("IScroll").toBool();
                NScroll = ui->Types->property("NScroll").toBool();
                /* other variable assignments */
            
                if (IScroll) str += tr("IScroll") + " ";
                if (NScroll) str += tr("NScroll") + " ";
                /* OtherCondition Check */
                str.remove(str.size() - 1, 1);
            
                QStringList Sublist = ui->Types->property("SubList").toStringList();
                int size = Sublist.size() / 2;
            
                if (size){
                    str += " -";
                    for (int i = 0; i < size; ++i){
                        str += " " + Sublist.at(i * 2);
                    }
                }
            
                if (str.isEmpty()){
                    str = tr("Main && Subtypes");
                }
                ui->Types->setText(str);
            }
            
            1 Reply Last reply
            0
            • Christian EhrlicherC Offline
              Christian EhrlicherC Offline
              Christian Ehrlicher
              Lifetime Qt Champion
              wrote on last edited by
              #7

              Run your program with a debugger, stop the debugger when your program stops and take a look at the backtrace where it comes from.

              Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
              Visit the Qt Academy at https://academy.qt.io/catalog

              M 2 Replies Last reply
              2
              • Christian EhrlicherC Christian Ehrlicher

                Run your program with a debugger, stop the debugger when your program stops and take a look at the backtrace where it comes from.

                M Offline
                M Offline
                MasterBlade
                wrote on last edited by
                #8

                @Christian-Ehrlicher said in QTimer doesn't work the expected way:

                Run your program with a debugger, stop the debugger when your program stops and take a look at the backtrace where it comes from.

                I am currently running the program with QTCreator in debug mode. May I ask how to stop the debugger?

                jsulmJ 1 Reply Last reply
                0
                • Christian EhrlicherC Christian Ehrlicher

                  Run your program with a debugger, stop the debugger when your program stops and take a look at the backtrace where it comes from.

                  M Offline
                  M Offline
                  MasterBlade
                  wrote on last edited by MasterBlade
                  #9

                  @Christian-Ehrlicher said in QTimer doesn't work the expected way:

                  Run your program with a debugger, stop the debugger when your program stops and take a look at the backtrace where it comes from.

                  Hi I have set the single shot duration to 10 secs and rerun the program. It pauses for 2 secs and the text disappeared at 10 sec.
                  Does this mean there is a long latency when writing INI? I need to write 40 items to the INI file.

                  1 Reply Last reply
                  0
                  • M MasterBlade

                    @Christian-Ehrlicher said in QTimer doesn't work the expected way:

                    Run your program with a debugger, stop the debugger when your program stops and take a look at the backtrace where it comes from.

                    I am currently running the program with QTCreator in debug mode. May I ask how to stop the debugger?

                    jsulmJ Offline
                    jsulmJ Offline
                    jsulm
                    Lifetime Qt Champion
                    wrote on last edited by
                    #10

                    @MasterBlade said in QTimer doesn't work the expected way:

                    May I ask how to stop the debugger?

                    Simply press the same button you used to start debugging...

                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                    M 1 Reply Last reply
                    0
                    • jsulmJ jsulm

                      @MasterBlade said in QTimer doesn't work the expected way:

                      May I ask how to stop the debugger?

                      Simply press the same button you used to start debugging...

                      M Offline
                      M Offline
                      MasterBlade
                      wrote on last edited by
                      #11

                      @jsulm said in QTimer doesn't work the expected way:

                      @MasterBlade said in QTimer doesn't work the expected way:

                      May I ask how to stop the debugger?

                      Simply press the same button you used to start debugging...

                      I paused the debugger, but didn't find many differences. Application output only has a single line. Where else should I check?

                      15:16:35: Debugging starts
                      
                      jsulmJ 1 Reply Last reply
                      0
                      • M MasterBlade

                        @jsulm said in QTimer doesn't work the expected way:

                        @MasterBlade said in QTimer doesn't work the expected way:

                        May I ask how to stop the debugger?

                        Simply press the same button you used to start debugging...

                        I paused the debugger, but didn't find many differences. Application output only has a single line. Where else should I check?

                        15:16:35: Debugging starts
                        
                        jsulmJ Offline
                        jsulmJ Offline
                        jsulm
                        Lifetime Qt Champion
                        wrote on last edited by
                        #12

                        @MasterBlade said in QTimer doesn't work the expected way:

                        Where else should I check?

                        In the debugger. In debugger view there is "Debugger" section with the stack trace (select thread #1). You should really get familiar with the debugger.

                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                        M 1 Reply Last reply
                        1
                        • jsulmJ jsulm

                          @MasterBlade said in QTimer doesn't work the expected way:

                          Where else should I check?

                          In the debugger. In debugger view there is "Debugger" section with the stack trace (select thread #1). You should really get familiar with the debugger.

                          M Offline
                          M Offline
                          MasterBlade
                          wrote on last edited by
                          #13

                          @jsulm said in QTimer doesn't work the expected way:

                          @MasterBlade said in QTimer doesn't work the expected way:

                          Where else should I check?

                          In the debugger. In debugger view there is "Debugger" section with the stack trace (select thread #1). You should really get familiar with the debugger.

                          1.png

                          jsulmJ 1 Reply Last reply
                          0
                          • M MasterBlade

                            @jsulm said in QTimer doesn't work the expected way:

                            @MasterBlade said in QTimer doesn't work the expected way:

                            Where else should I check?

                            In the debugger. In debugger view there is "Debugger" section with the stack trace (select thread #1). You should really get familiar with the debugger.

                            1.png

                            jsulmJ Offline
                            jsulmJ Offline
                            jsulm
                            Lifetime Qt Champion
                            wrote on last edited by
                            #14

                            @MasterBlade When exactly did you take this screen-shot? When your app was blocked? You also can check other threads.

                            https://forum.qt.io/topic/113070/qt-code-of-conduct

                            M 1 Reply Last reply
                            0
                            • jsulmJ jsulm

                              @MasterBlade When exactly did you take this screen-shot? When your app was blocked? You also can check other threads.

                              M Offline
                              M Offline
                              MasterBlade
                              wrote on last edited by
                              #15

                              @jsulm said in QTimer doesn't work the expected way:

                              @MasterBlade When exactly did you take this screen-shot? When your app was blocked? You also can check other threads.

                              Yeah it was taken when the program was blocked.
                              Thread #1-5 looks the same to me.

                              Thread #6 and #7
                              2.png
                              3.png

                              #8 and #9 are same as #1-5

                              #10-13
                              357baa19-b6cd-45c4-815b-6d2fba72be71-image.png

                              #14
                              b4c07d35-4b68-45ef-80d9-11635f78c4e1-image.png

                              #15
                              1ac91703-d49f-4777-ba3f-11b4c1ca9c7a-image.png

                              jsulmJ 1 Reply Last reply
                              0
                              • M MasterBlade

                                @jsulm said in QTimer doesn't work the expected way:

                                @MasterBlade When exactly did you take this screen-shot? When your app was blocked? You also can check other threads.

                                Yeah it was taken when the program was blocked.
                                Thread #1-5 looks the same to me.

                                Thread #6 and #7
                                2.png
                                3.png

                                #8 and #9 are same as #1-5

                                #10-13
                                357baa19-b6cd-45c4-815b-6d2fba72be71-image.png

                                #14
                                b4c07d35-4b68-45ef-80d9-11635f78c4e1-image.png

                                #15
                                1ac91703-d49f-4777-ba3f-11b4c1ca9c7a-image.png

                                jsulmJ Offline
                                jsulmJ Offline
                                jsulm
                                Lifetime Qt Champion
                                wrote on last edited by
                                #16

                                @MasterBlade Do you actually use threads in your app?

                                https://forum.qt.io/topic/113070/qt-code-of-conduct

                                M 1 Reply Last reply
                                0
                                • jsulmJ jsulm

                                  @MasterBlade Do you actually use threads in your app?

                                  M Offline
                                  M Offline
                                  MasterBlade
                                  wrote on last edited by
                                  #17

                                  @jsulm said in QTimer doesn't work the expected way:

                                  @MasterBlade Do you actually use threads in your app?

                                  I don't think I did. I don't know why there are so many threads.

                                  jsulmJ 1 Reply Last reply
                                  0
                                  • M MasterBlade

                                    @jsulm said in QTimer doesn't work the expected way:

                                    @MasterBlade Do you actually use threads in your app?

                                    I don't think I did. I don't know why there are so many threads.

                                    jsulmJ Offline
                                    jsulmJ Offline
                                    jsulm
                                    Lifetime Qt Champion
                                    wrote on last edited by
                                    #18

                                    @MasterBlade That's normal. I just wanted to know whether you create threads also by yourself. From the stack trace I can't see anything helpful.

                                    https://forum.qt.io/topic/113070/qt-code-of-conduct

                                    M 1 Reply Last reply
                                    0
                                    • jsulmJ jsulm

                                      @MasterBlade That's normal. I just wanted to know whether you create threads also by yourself. From the stack trace I can't see anything helpful.

                                      M Offline
                                      M Offline
                                      MasterBlade
                                      wrote on last edited by
                                      #19

                                      @jsulm said in QTimer doesn't work the expected way:

                                      @MasterBlade That's normal. I just wanted to know whether you create threads also by yourself. From the stack trace I can't see anything helpful.

                                      There is one problem I found curious. I am also using QSettings to write INI files, and I found it quite slow. Usually takes like 2 secs to write. I didn't use QTimer in that code. So I guess if it's QSettings that caused the block.

                                      jsulmJ 1 Reply Last reply
                                      0
                                      • M MasterBlade

                                        @jsulm said in QTimer doesn't work the expected way:

                                        @MasterBlade That's normal. I just wanted to know whether you create threads also by yourself. From the stack trace I can't see anything helpful.

                                        There is one problem I found curious. I am also using QSettings to write INI files, and I found it quite slow. Usually takes like 2 secs to write. I didn't use QTimer in that code. So I guess if it's QSettings that caused the block.

                                        jsulmJ Offline
                                        jsulmJ Offline
                                        jsulm
                                        Lifetime Qt Champion
                                        wrote on last edited by
                                        #20

                                        @MasterBlade Where are the settings stored? Is it network drive, local drive, Windows registry?

                                        https://forum.qt.io/topic/113070/qt-code-of-conduct

                                        M 1 Reply Last reply
                                        0
                                        • jsulmJ jsulm

                                          @MasterBlade Where are the settings stored? Is it network drive, local drive, Windows registry?

                                          M Offline
                                          M Offline
                                          MasterBlade
                                          wrote on last edited by
                                          #21

                                          @jsulm said in QTimer doesn't work the expected way:

                                          @MasterBlade Where are the settings stored? Is it network drive, local drive, Windows registry?

                                          local hard disk in INI format

                                          jsulmJ J.HilkJ 2 Replies 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