2017-12-06 14 views
0

BeagleBoard x15를 사용하여 카운터를 보여줍니다. 버튼을 클릭하면 루프가 실행됩니다.BeagleBoard x15에 마지막 카운터 번호 만 표시됩니까? Qt

for(int i=0;i<10;i++){ 
    ui->label->setText(QString::number(i)); 
    delay(1s); 
} 

그러나 라벨에 '9'라는 마지막 번호 만 표시됩니다. 표시되어야합니다 : 1, 2, 3, 4, 5, ... 각 1 후 9. 나는 Qt를 사용한다.

무슨 일이 일어 났는지 말해 줄 수 있습니까? 고맙습니다. Qt는의 응용 프로그램이 지연 블록, 올바른 일을 사용하는 것입니다 루프에 살고 있기 때문에

답변

0

문제가 발생하는 QTimer :

ui->label->setText("0"); 
QTimer *timer(this); 
connect(timer, &QTimer::timeout, [timer, this](){ 
    int i = ui->label->text().toInt(); 
    ui->label->setText(QString::number(i+1)); 
    if(i == 9) 
     timer->stop(); 
}); 

timer->start(1000); 
+0

사실, 내가 QTimer를 사용할 수 있다는 것을 알고 있지만 그것을 사용하고 싶지 않아. 나는 그 문제를 해결했다 : qApp-> processEvents를 사용했다. – Colo

+1

@Colo 다른 프로세스가 차단 될 수 있으므로 현재 프로그램이 작동하지만 더 많은 이벤트를 처리하는 프로세스가 올바르게 작동하지 않을 수 있으므로이를 수행하지 않는 것이 좋습니다. – eyllanesc

+0

나는 나의 코드를 다시 점검 할 것이다. 도움을 주셔서 감사합니다. – Colo