PDA

View Full Version : keyboard event + qlabel rerending problem



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! :)

high_flyer
29th August 2012, 08:39
@Rource:
This is an English speaking forum, please use English - as people from all over the world use it, an most non Russians can't read non English posts.
I will let you some time to rewrite your post in English, if not, I will delete it.