2010-12-22 5 views
8

Tengo una etiqueta básica que se supone que indica al usuario que el programa está buscando directorios durante varios segundos. Así que va como ...QLabel setText no muestra texto inmediatamente antes de ejecutar otro método

self.label.setText(QString("Searching...")) 
# method to search directories goes here 
self.label.setText(QString("Search Complete")) 

Mi problema es que la etiqueta nunca muestra "Buscando ...". La ejecución siempre parece saltar directamente para ejecutar el método para escanear directorios, y luego el texto de la etiqueta se establece en "Búsqueda completa" después de que el método que escanea los directorios haya finalizado.

Estaría agradecido si alguien pudiera explicar por qué sucede esto o sugerir una forma mejor de resolver el problema.

muchas gracias

Respuesta

16

Su "método para buscar en los directorios" está bloqueando la interfaz gráfica de usuario, por lo tanto QLabel no es capaz de actualizar el texto. Puede hacer su búsqueda asíncrona de rutina o ir por el camino fácil y forzar QLabel actualizarse a sí mismo:

self.label.setText(QString("Searching...")) 
self.label.repaint() 
# method to search directories goes here 
self.label.setText(QString("Search Complete")) 
+0

Eso es genial. Muchas gracias por tu respuesta. – Kim

+1

Esto funcionó para mí también, usando un QLineEdit. –

+2

Agregué qApp-> processEvents() después de volver a pintar(), y eso funcionó para mí. Ver http://stackoverflow.com/a/2066916/2706918 –

0

Agregar incluyen:

#include <qapplication.h> 

dejar que los acontecimientos del proceso de Qt:

self.label.setText(QString("Searching...")) 
qApp->processEvents(); 

Nota: repintado() no era necesario.

Cuestiones relacionadas