Hey guys, I'm just having a weird problem when I try to change qlabels focus with the keyboard. My problem is, I have 4 qlabels like a gridlayout with 2 columns and 2 rows. Since my application doesn't have a touchscreen display I had to override the keyPressEvent to manipulate the keyboard events. The problem is, when any directional key to change the selected label it doesn't rerender it, but if I press another key, the label just rerender as I want! I just debugged it and the label got the focus, but don't rerender the image. That's my code:

PS: I'll do some code refactoring on the code, I just did that do make easier(or not) to see what's the problem.

Qt Code:
  1. //Refact THIS!!!
  2. void MenuWindow::keyPressEvent(QKeyEvent *event){
  3. if(event->key() == Qt::Key_Escape){
  4. back->setFocus();
  5. return;
  6. }
  7.  
  8. if(configLabel->hasFocus()){
  9. //REFATORAR. EXTRACT METHOD
  10. cout << "CONFIG LABEL COM FOCO!" << endl;
  11. configLabelImage->load(STRING_PATH_TO_IMAGES+"icone_configuracoes_selected.png");
  12. if(event->key() == Qt::Key_Down){
  13. configLabelImage->load(STRING_PATH_TO_IMAGES+"icone_configuracoes.png");
  14. storageLabel->setFocus();
  15. }else if(event->key() == Qt::Key_Right){
  16. configLabelImage->load(STRING_PATH_TO_IMAGES+"icone_configuracoes.png");
  17. multimediaLabel->setFocus();
  18. }
  19. configLabel->setPixmap(QPixmap::fromImage(*configLabelImage));
  20. }else if(multimediaLabel->hasFocus()){
  21. cout << "MULTI LABEL COM FOCO!" << endl;
  22. multimediaLabelImage->load(STRING_PATH_TO_IMAGES+"icone_multimedia_selected.png");
  23. if(event->key() == Qt::Key_Down){
  24. multimediaLabelImage->load(STRING_PATH_TO_IMAGES+"icone_multimedia.png");
  25. energyLabel->setFocus();
  26. }else if(event->key() == Qt::Key_Left){
  27. multimediaLabelImage->load(STRING_PATH_TO_IMAGES+"icone_multimedia.png");
  28. configLabel->setFocus();
  29. }
  30. multimediaLabel->setPixmap(QPixmap::fromImage(*multimediaLabelImage));
  31. }else if(storageLabel->hasFocus()){
  32. cout << "STORAGE LABEL COM FOCO!" << endl;
  33. storageLabelImage->load(STRING_PATH_TO_IMAGES+"icone_armazenamento_selected.png");
  34. if(event->key() == Qt::Key_Up){
  35. storageLabelImage->load(STRING_PATH_TO_IMAGES+"icone_armazenamento.png");
  36. configLabel->setFocus();
  37. }else if(event->key() == Qt::Key_Right){
  38. storageLabelImage->load(STRING_PATH_TO_IMAGES+"icone_armazenamento.png");
  39. energyLabel->setFocus();
  40. }else if(event->key() == Qt::Key_Down){
  41. storageLabelImage->load(STRING_PATH_TO_IMAGES+"icone_armazenamento.png");
  42. select->setFocus();
  43. }
  44. storageLabel->setPixmap(QPixmap::fromImage(*storageLabelImage));
  45. }else if(energyLabel->hasFocus()){
  46. cout << "ENERGy LABEL COM FOCO!" << endl;
  47. energyLabelImage->load(STRING_PATH_TO_IMAGES+"icone_energia_selected.png");
  48. if(event->key() == Qt::Key_Up){
  49. energyLabelImage->load(STRING_PATH_TO_IMAGES+"icone_energia.png");
  50. multimediaLabel->setFocus();
  51. }else if(event->key() == Qt::Key_Left){
  52. energyLabelImage->load(STRING_PATH_TO_IMAGES+"icone_energia.png");
  53. storageLabel->setFocus();
  54. }else if(event->key() == Qt::Key_Down){
  55. energyLabelImage->load(STRING_PATH_TO_IMAGES+"icone_energia.png");
  56. select->setFocus();
  57. }
  58. energyLabel->setPixmap(QPixmap::fromImage(*energyLabelImage));
  59. }else if(select->hasFocus()){
  60. cout << "SELECT COM FOCO" << endl;
  61. if(event->key() == Qt::Key_Up){
  62. storageLabel->setFocus();
  63. }else if(event->key() == Qt::Key_Right){
  64. back->setFocus();
  65. }
  66. }else if(back->hasFocus()){
  67. cout << "BACK COM FOCO" << endl;
  68. if(event->key() == Qt::Key_Up){
  69. energyLabel->setFocus();
  70. }else if(event->key() == Qt::Key_Left){
  71. select->setFocus();
  72. }
  73. }
  74.  
  75. }
To copy to clipboard, switch view to plain text mode 


Tks in advance!