QProcessBar congela la pantalla
-
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.
-
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...
}