Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Spanish
  4. QProcessBar congela la pantalla
Forum Updated to NodeBB v4.3 + New Features

QProcessBar congela la pantalla

Scheduled Pinned Locked Moved Spanish
2 Posts 2 Posters 1.1k 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.
  • N Offline
    N Offline
    nurtan
    wrote on last edited by
    #1

    Quiero tener una barra de progreso global en la aplicación para poder utilizarla con varios procesos, como por ejemplo abrir archivo, procesar un trabajo, etc.

    Para ello he creado un QProgressBar en la ventana principal de la aplicación, y la voy pasando a cada uno de los procesos, en este caso a un proceso que abre el archivo y actualiza la barra de progreso por cada linea de lee, el problema esta en que mientras se ejecuta el proceso la barra se actualiza pero la ventana se congela,

    Después de mucho leer en todos los sitios indican que hay que crear un QThread que haga el proceso y envié una señal de actualización de la barra. He hecho eso mismo me he creado un QThread con la logica de abrir el archivo y cada linea que lee envía una señal de actualizar la barra de progreso a la ventana principal donde la capturo y actualizo la barra de progreso. Pero la ventana se sigue bloqueando.

    Alguna idea de por que se bloquea en esta situación, algún ejemplo en el que se muestre como hacer esto. o no es posible.

    1 Reply Last reply
    0
    • K Offline
      K Offline
      kapyderi
      wrote on last edited by kapyderi
      #2

      Hola nurtan.

      Para que no se congele la pantalla cuando estas haciendo un progreso, debes poner dentro del bucle que realice el proceso lo siguiente:

      qApp->processEvents();

      Y ya te deberia funcionar.

      Por otro lado lo de los theard yo no los utilizaría porque te pueda petar el programa al estar en un hilo diferente al que tienes, en el caso de que tengas que pegar los datos en un lineedit por ejemplo.

      Pero vamos, te explico como hacerlo...

      En el constructor pones...
      QFuture<void> f1 = QtConcurrent::run(this, &NOMBREDETUCPP::Recibir);
      Q_UNUSED(f1);

      Y luego la funcion...

      void NOMBREDETUCPP::Recibir()
      {
      // Los datos que quieres hacer...
      }

      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