Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Update: Forum Guidelines & Code of Conduct

    Unsolved GUI does not update when standard C++ file operation takes place

    General and Desktop
    qwidget update qprogressbar desktop
    3
    7
    2786
    Loading More Posts
    • 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.
    • K
      kzarog last edited by kzarog

      Hello all,

      I am having the following issue; the GUI I have built does not update when a standard C++ operation takes place.

      I want to have a QProgressBar that continuously moves (since I do not know how long it will take) until the file import is completed. The QProgressBar is notified by a signal to initiate and end its animation. However, the progress bar is never seen in action by the user. Debugging the program confirms that everything works as intended but the GUI does not update while the file import operation takes place, behaving as a bottleneck. Updating the widgets using update() does not help.

      Is this working as intended? Any pointers on how I could resolve this? If possible, I would not want to move the file operation onto a new thread.

      Thank you in advance!

      mrjj 1 Reply Last reply Reply Quote 0
      • sneubert
        sneubert last edited by

        Hi kzargo,

        as long as there´s a blocking function call in your applications main thread the gui won´t update. You can either use async operations or creat a thread.

        1 Reply Last reply Reply Quote 0
        • mrjj
          mrjj Lifetime Qt Champion @kzarog last edited by

          @kzarog
          A thread sounds like good idea.
          You could also try with QApplication::processEvents()
          but its not good design and should be used only for a quick fix /testing.

          1 Reply Last reply Reply Quote 0
          • K
            kzarog last edited by

            @sneubert , @mrjj Thank you both for your replies!

            QApplication::processEvents() seems to not be working, unfortunately.

            It seems that threading is the way to go with this one... Would you recommend my using of the QThread or maybe the QtConcurrent approach?

            Again, thank you for your help!

            mrjj 1 Reply Last reply Reply Quote 0
            • mrjj
              mrjj Lifetime Qt Champion @kzarog last edited by

              @kzarog said:
              Well if the reading takes a long time,
              processEvent does nothing for you.

              well I vote for QtConcurrent just because I found it easy to get up and running
              http://doc.qt.io/qt-5/qtconcurrent-runfunction-example.html

              but if its the best solution to your task, I dont know.

              1 Reply Last reply Reply Quote 0
              • sneubert
                sneubert last edited by sneubert

                QTConcurrent::run is easier to use but you cant cancle the operation or be sure your function is running immediately. So where finere control is neccesary use QThread

                1 Reply Last reply Reply Quote 1
                • K
                  kzarog last edited by

                  Thank you for your answers, I will look into both QThread and QtConcurrent.

                  1 Reply Last reply Reply Quote 0
                  • First post
                    Last post