2015-08-16 5 views
0

Это метод, который я называю с помощью кнопки мышиПочему не обновляется метка Qt?

void ChangeLabelText(QLabel* myLabel) 
{ 
    int countNumber = 0; 
    for(int i = 0; i < 9999; i++)//outer loop 
    { 
     for(int k = 0; k < 65000; k++)//inner loop 
     { 
      countNumber++; 
     } 
     myLabel->setText(QString::number(countNumber)); 
    } 
} 

Когда код работает текст метки устанавливается в конце outer loop, но я ожидал, что это набор текста лейбла каждый раз, когда inner loop заканчивается. Что может быть причиной этого?

+2

Ваш код, выполняемый в основном потоке и в основном потоке, обновление UI происходит при обратных вызовах событий. То, что вам нужно, - это перекрасить ваш ui. Вы можете сделать это, вызвав 'repaint()' или попросив применение для обработки событий 'QCoreApplication :: processEvents()'. Вам нужно сделать это после смены ярлыка. – johngull

+0

Текст устанавливается каждый раз через цикл, но метка не перерисовывается до тех пор, пока выполнение не вернется в цикл событий и событие обработки может быть обработано. Если элементы управления были перекрашены в режиме реального времени по мере изменения их свойств, вы увидите очень много мерцания. –

+0

@ johngull Ваш ответ сработал отлично. Вы можете ввести его в качестве ответа, чтобы любители, такие как я, могли видеть ответ. – ozgur

ответ

1

Ваш код, выполняемый в основном потоке и в основном потоке, обновление UI происходит при обратных вызовах событий. То, что вам нужно, - это перекрасить ваш ui. Вы можете сделать это, позвонив repaint() или попросив приложение обработать события с помощью QCoreApplication::processEvents(). Вам нужно сделать это после смены ярлыка.