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. QProgressDialog doesn't update
Forum Updated to NodeBB v4.3 + New Features

QProgressDialog doesn't update

Scheduled Pinned Locked Moved Solved General and Desktop
13 Posts 3 Posters 3.2k Views 3 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.
  • D DoubleC122

    This is it: QApplication a(argc, argv);

    QProgressDialog progress("Copying files...", "Abort Copy", 0, 10);
    progress.setWindowModality(Qt::WindowModal);
    
    progress.exec();
    for (int i = 1; i <= 10; i++) {
    
        QCoreApplication::processEvents();
        progress.setValue(i);
        if (progress.wasCanceled())
            break;
        std::cout<<"i: "<<i<<"\n";
    }
    progress.close();```
    
    SGaistS Offline
    SGaistS Offline
    SGaist
    Lifetime Qt Champion
    wrote on last edited by
    #4

    Hi,

    @DoubleC122 said in QProgressDialog doesn't update:

    progress.exec();
    for (int i = 1; i <= 10; i++) {

    exec starts an event loop, so currently, your for loop is only executed after the dialog is closed.

    Interested in AI ? www.idiap.ch
    Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

    D 1 Reply Last reply
    0
    • SGaistS SGaist

      Hi,

      @DoubleC122 said in QProgressDialog doesn't update:

      progress.exec();
      for (int i = 1; i <= 10; i++) {

      exec starts an event loop, so currently, your for loop is only executed after the dialog is closed.

      D Offline
      D Offline
      DoubleC122
      wrote on last edited by
      #5

      @SGaist I see. Well, otherwise my dialog won't show. Is there another way?

      1 Reply Last reply
      0
      • SGaistS Offline
        SGaistS Offline
        SGaist
        Lifetime Qt Champion
        wrote on last edited by
        #6

        Call show on the dialog.

        Just in case, QProgressDialog's documentation offers some example on how to use it.

        Interested in AI ? www.idiap.ch
        Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

        1 Reply Last reply
        0
        • D Offline
          D Offline
          DoubleC122
          wrote on last edited by
          #7

          Yes, but unfortunately, it won't appear when I call show().

          1 Reply Last reply
          0
          • SGaistS Offline
            SGaistS Offline
            SGaist
            Lifetime Qt Champion
            wrote on last edited by
            #8

            Something I didn't realise... Your loop is just too short and too fast for the dialog to appear.

            Interested in AI ? www.idiap.ch
            Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

            1 Reply Last reply
            0
            • D Offline
              D Offline
              DoubleC122
              wrote on last edited by
              #9

              Hm, I thought it would appear anyway...Still, I changed the limit to something bigger, like 100 and 1000, and still won't show. Quite strange.

              mrjjM 1 Reply Last reply
              0
              • D DoubleC122

                Hm, I thought it would appear anyway...Still, I changed the limit to something bigger, like 100 and 1000, and still won't show. Quite strange.

                mrjjM Offline
                mrjjM Offline
                mrjj
                Lifetime Qt Champion
                wrote on last edited by
                #10

                @DoubleC122
                Well its just still too fast as it do no real work.
                It does show very fast. (flashing)

                for test, you can do

                #include <QThread>
                ...
                 progress.show();
                  for (int i = 1; i <= 13330; i++) {
                
                    QCoreApplication::processEvents();
                    progress.setValue(i);
                    if (progress.wasCanceled())
                    { break; }
                    QThread::sleep(1); // bad in real code! but just to show it does work.
                  }
                
                  progress.close();
                

                alt text

                D 1 Reply Last reply
                1
                • mrjjM mrjj

                  @DoubleC122
                  Well its just still too fast as it do no real work.
                  It does show very fast. (flashing)

                  for test, you can do

                  #include <QThread>
                  ...
                   progress.show();
                    for (int i = 1; i <= 13330; i++) {
                  
                      QCoreApplication::processEvents();
                      progress.setValue(i);
                      if (progress.wasCanceled())
                      { break; }
                      QThread::sleep(1); // bad in real code! but just to show it does work.
                    }
                  
                    progress.close();
                  

                  alt text

                  D Offline
                  D Offline
                  DoubleC122
                  wrote on last edited by
                  #11

                  @mrjj Yes, it works indeed. So I guess the dialog will appear only when there is a for loop big enough?

                  mrjjM 1 Reply Last reply
                  0
                  • D DoubleC122

                    @mrjj Yes, it works indeed. So I guess the dialog will appear only when there is a for loop big enough?

                    mrjjM Offline
                    mrjjM Offline
                    mrjj
                    Lifetime Qt Champion
                    wrote on last edited by mrjj
                    #12

                    @DoubleC122
                    yes, if it does real stuff like copy file or anything that takes time.
                    even with high for loop it just too fast to see :)
                    But if u do something real, it works. Thats what i used sleep to emulate.
                    but dont use sleep for anything production code as u sleep the app .)

                    1 Reply Last reply
                    1
                    • D Offline
                      D Offline
                      DoubleC122
                      wrote on last edited by
                      #13

                      Got it. Thanks.

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