hedlabel
28th August 2012, 20:31
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.
//Refact THIS!!!
void MenuWindow::keyPressEvent(QKeyEvent *event){
if(event->key() == Qt::Key_Escape){
back->setFocus();
return;
}
if(configLabel->hasFocus()){
//REFATORAR. EXTRACT METHOD
cout << "CONFIG LABEL COM FOCO!" << endl;
configLabelImage->load(STRING_PATH_TO_IMAGES+"icone_configuracoes_selected.png");
if(event->key() == Qt::Key_Down){
configLabelImage->load(STRING_PATH_TO_IMAGES+"icone_configuracoes.png");
storageLabel->setFocus();
}else if(event->key() == Qt::Key_Right){
configLabelImage->load(STRING_PATH_TO_IMAGES+"icone_configuracoes.png");
multimediaLabel->setFocus();
}
configLabel->setPixmap(QPixmap::fromImage(*configLabelImage));
}else if(multimediaLabel->hasFocus()){
cout << "MULTI LABEL COM FOCO!" << endl;
multimediaLabelImage->load(STRING_PATH_TO_IMAGES+"icone_multimedia_selected.png");
if(event->key() == Qt::Key_Down){
multimediaLabelImage->load(STRING_PATH_TO_IMAGES+"icone_multimedia.png");
energyLabel->setFocus();
}else if(event->key() == Qt::Key_Left){
multimediaLabelImage->load(STRING_PATH_TO_IMAGES+"icone_multimedia.png");
configLabel->setFocus();
}
multimediaLabel->setPixmap(QPixmap::fromImage(*multimediaLabelImage ));
}else if(storageLabel->hasFocus()){
cout << "STORAGE LABEL COM FOCO!" << endl;
storageLabelImage->load(STRING_PATH_TO_IMAGES+"icone_armazenamento_selected.png");
if(event->key() == Qt::Key_Up){
storageLabelImage->load(STRING_PATH_TO_IMAGES+"icone_armazenamento.png");
configLabel->setFocus();
}else if(event->key() == Qt::Key_Right){
storageLabelImage->load(STRING_PATH_TO_IMAGES+"icone_armazenamento.png");
energyLabel->setFocus();
}else if(event->key() == Qt::Key_Down){
storageLabelImage->load(STRING_PATH_TO_IMAGES+"icone_armazenamento.png");
select->setFocus();
}
storageLabel->setPixmap(QPixmap::fromImage(*storageLabelImage));
}else if(energyLabel->hasFocus()){
cout << "ENERGy LABEL COM FOCO!" << endl;
energyLabelImage->load(STRING_PATH_TO_IMAGES+"icone_energia_selected.png");
if(event->key() == Qt::Key_Up){
energyLabelImage->load(STRING_PATH_TO_IMAGES+"icone_energia.png");
multimediaLabel->setFocus();
}else if(event->key() == Qt::Key_Left){
energyLabelImage->load(STRING_PATH_TO_IMAGES+"icone_energia.png");
storageLabel->setFocus();
}else if(event->key() == Qt::Key_Down){
energyLabelImage->load(STRING_PATH_TO_IMAGES+"icone_energia.png");
select->setFocus();
}
energyLabel->setPixmap(QPixmap::fromImage(*energyLabelImage));
}else if(select->hasFocus()){
cout << "SELECT COM FOCO" << endl;
if(event->key() == Qt::Key_Up){
storageLabel->setFocus();
}else if(event->key() == Qt::Key_Right){
back->setFocus();
}
}else if(back->hasFocus()){
cout << "BACK COM FOCO" << endl;
if(event->key() == Qt::Key_Up){
energyLabel->setFocus();
}else if(event->key() == Qt::Key_Left){
select->setFocus();
}
}
}
Tks in advance! :)
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.
//Refact THIS!!!
void MenuWindow::keyPressEvent(QKeyEvent *event){
if(event->key() == Qt::Key_Escape){
back->setFocus();
return;
}
if(configLabel->hasFocus()){
//REFATORAR. EXTRACT METHOD
cout << "CONFIG LABEL COM FOCO!" << endl;
configLabelImage->load(STRING_PATH_TO_IMAGES+"icone_configuracoes_selected.png");
if(event->key() == Qt::Key_Down){
configLabelImage->load(STRING_PATH_TO_IMAGES+"icone_configuracoes.png");
storageLabel->setFocus();
}else if(event->key() == Qt::Key_Right){
configLabelImage->load(STRING_PATH_TO_IMAGES+"icone_configuracoes.png");
multimediaLabel->setFocus();
}
configLabel->setPixmap(QPixmap::fromImage(*configLabelImage));
}else if(multimediaLabel->hasFocus()){
cout << "MULTI LABEL COM FOCO!" << endl;
multimediaLabelImage->load(STRING_PATH_TO_IMAGES+"icone_multimedia_selected.png");
if(event->key() == Qt::Key_Down){
multimediaLabelImage->load(STRING_PATH_TO_IMAGES+"icone_multimedia.png");
energyLabel->setFocus();
}else if(event->key() == Qt::Key_Left){
multimediaLabelImage->load(STRING_PATH_TO_IMAGES+"icone_multimedia.png");
configLabel->setFocus();
}
multimediaLabel->setPixmap(QPixmap::fromImage(*multimediaLabelImage ));
}else if(storageLabel->hasFocus()){
cout << "STORAGE LABEL COM FOCO!" << endl;
storageLabelImage->load(STRING_PATH_TO_IMAGES+"icone_armazenamento_selected.png");
if(event->key() == Qt::Key_Up){
storageLabelImage->load(STRING_PATH_TO_IMAGES+"icone_armazenamento.png");
configLabel->setFocus();
}else if(event->key() == Qt::Key_Right){
storageLabelImage->load(STRING_PATH_TO_IMAGES+"icone_armazenamento.png");
energyLabel->setFocus();
}else if(event->key() == Qt::Key_Down){
storageLabelImage->load(STRING_PATH_TO_IMAGES+"icone_armazenamento.png");
select->setFocus();
}
storageLabel->setPixmap(QPixmap::fromImage(*storageLabelImage));
}else if(energyLabel->hasFocus()){
cout << "ENERGy LABEL COM FOCO!" << endl;
energyLabelImage->load(STRING_PATH_TO_IMAGES+"icone_energia_selected.png");
if(event->key() == Qt::Key_Up){
energyLabelImage->load(STRING_PATH_TO_IMAGES+"icone_energia.png");
multimediaLabel->setFocus();
}else if(event->key() == Qt::Key_Left){
energyLabelImage->load(STRING_PATH_TO_IMAGES+"icone_energia.png");
storageLabel->setFocus();
}else if(event->key() == Qt::Key_Down){
energyLabelImage->load(STRING_PATH_TO_IMAGES+"icone_energia.png");
select->setFocus();
}
energyLabel->setPixmap(QPixmap::fromImage(*energyLabelImage));
}else if(select->hasFocus()){
cout << "SELECT COM FOCO" << endl;
if(event->key() == Qt::Key_Up){
storageLabel->setFocus();
}else if(event->key() == Qt::Key_Right){
back->setFocus();
}
}else if(back->hasFocus()){
cout << "BACK COM FOCO" << endl;
if(event->key() == Qt::Key_Up){
energyLabel->setFocus();
}else if(event->key() == Qt::Key_Left){
select->setFocus();
}
}
}
Tks in advance! :)