Hi,

I am working on an application where I need to detect Keypress/Release events from inside a while loop

Below is my code snippet

Qt Code:
  1. void TabDialog::keyPressEvent(QKeyEvent *event)
  2. {
  3.  
  4. switch (event->key()) {
  5. case Qt::Key_F1:
  6. {
  7.  
  8. qDebug()<<"Inside Key F1 Press Event";
  9. while(i>0 )
  10. {
  11. qDebug()<<"Inside while loop";
  12. usleep(1000000);
  13.  
  14. if(releaseFlag==1)
  15. {
  16. releaseFlag=0;
  17. break;
  18. }
  19. i--;
  20. }
  21.  
  22. releaseFlag=0;
  23. }
  24.  
  25.  
  26. default:
  27. break;
  28. }
  29. }
  30.  
  31. void TabDialog::keyReleaseEvent(QKeyEvent *event)
  32. {
  33. switch (event->key()) {
  34. case Qt::Key_F1:
  35. {
  36. releaseFlag=1;
  37. qDebug()<<"Inside Key F1 Release Event";
  38.  
  39. }
  40. break;
  41. default:
  42. break;
  43. }
  44. }
To copy to clipboard, switch view to plain text mode 

I have keypress event where in which I have a while loop which is going to execute for 10 iterations. Now if I release the F1 key (before completing 10 iterations), "releaseFlag" is not set to 1 and while loop is not getting break immediately. It was only after executing the while loop for 10 iterations I can see the change in "releaseFlag" value.

Below is the output

Qt Code:
  1. Inside Key F1 Press Event
  2. Inside while loop
  3. Inside while loop
  4. Inside while loop
  5. Inside while loop
  6. Inside while loop
  7. Inside while loop
  8. Inside while loop
  9. Inside while loop
  10. Inside while loop
  11. Inside while loop
  12. Inside Key F1 Release Event
To copy to clipboard, switch view to plain text mode 

I want to identity the release event immediately and break the while loop..

Can someone guide me how to handle this?

Regards,
Pavan