2010-12-22 22 views
8

Kullanıcıya, programın dizinleri birkaç saniye aradığını bildirmesi gereken temel bir etiket var. Bu şekilde gider ...QLabel setText, başka bir yöntemi çalıştırmadan hemen önce metni görüntülemiyor

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

Sorunum, etiketin hiçbir zaman "Arama ..." mesajını görüntülememesidir. Yürütme her zaman dizinleri taramak için yöntemi çalıştırmak için doğrudan atlamak gibi görünüyor ve daha sonra dizinleri taranan yöntem bittikten sonra etiket metni "Arama Tamamlandı" olarak ayarlandı.

Birisi bunun neden olduğunu açıklayabilir veya sorunu çözmek için daha iyi bir yol önerebilirse minnettar olurum.

çok teşekkürler

cevap

16

GUI engelliyor Sizin "dizinleri arama yöntemi" dolayısıyla QLabel metni güncellemek mümkün değildir. Eğer arama rutin uyumsuz yapmak veya kolay yoldan gidip kendisini güncellemek için QLabel zorlayabilir:

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

Bu harika. Cevabınız için çok teşekkürler. – Kim

+1

Bu da benim için QLineEdit kullanarak çalıştı. –

+2

Yeniden boyamadan() sonra qApp-> processEvents() öğesini ekledim ve bu benim için çalıştı. Bkz. Http://stackoverflow.com/a/2066916/2706918 –

0

Ekle şunlardır:

#include <qapplication.h> 

Let Qt süreç olayları:

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

Not: repaint() zorunlu değildi.

İlgili konular