J'ai une application graphique écrite en Qt pour linux embarqué. Une partie de cette application consiste à mettre à jour un écran d'affichage toutes les 250 ms. Cependant, après environ 8-10 heures, l'application se bloque avec un message "QList : Out of memory". J'ai isolé la fonction et les lignes (dans un sens) où cela se produit, mais je n'ai aucune idée de la raison pour laquelle cela se produit puisque je n'utilise pas QList. Les seules lignes de code actives dans cette fonction se trouvent à la fin de cette question.
Je sais que QList ne "réduit" jamais la mémoire qu'elle utilise pour contenir les éléments, mais je n'utilise QList nulle part dans mon code. Je n'appelle 'setStyleSheet' que pour définir diverses polices et propriétés sur les widgets de l'interface utilisateur (étiquettes, champs de texte, etc.). Il y a plus de code, mais il est entièrement commenté, donc je suppose qu'il a quelque chose à voir avec setStyleSheet. Quelqu'un sait-il pourquoi cela se produit ? Si oui, connaissez-vous un moyen de le contourner ? J'utilise Q.t. 4.3 btw (en raison de son chargement spécifique sur le système embarqué que j'utilise).
Merci beaucoup pour votre temps.
if(twc_rx){
ui->label_Rx->setStyleSheet("QLabel { background-color: lime; font: bold 16px 'Arial' }");
}else if(!twc_rx){
ui->label_Rx->setStyleSheet("QLabel { background-color: grey; font: bold 16px 'Arial' }");
}//line 561 to 684
if(twc_tx){
ui->label_Tx->setStyleSheet("QLabel { background-color: lime; font: bold 16px 'Arial' }");
}else{
ui->label_Tx->setStyleSheet("QLabel { background-color: grey; font: bold 16px 'Arial' }");
}if(ats_stat){
ui->label_ATS->setStyleSheet("QLabel { background-color: lime; border-radius: 10; font: bold 16px 'Arial'}");
}else{
ui->label_ATS->setStyleSheet("QLabel { background-color: red; border-radius: 10; font: bold 16px 'Arial'}");
}
if(atp_stat){
ui->label_atp2->setStyleSheet("QLabel { background-color: lime; border-radius: 10; font: bold 16px 'Arial'}");
}else{
ui->label_atp2->setStyleSheet("QLabel { background-color: red; border-radius: 10; font: bold 16px 'Arial'}");
}
if(ato_stat){
ui->label_ATO->setStyleSheet("QLabel { background-color: lime; border-radius: 10; font: bold 16px 'Arial'}");
}else{
ui->label_ATO->setStyleSheet("QLabel { background-color: red; border-radius: 10; font: bold 16px 'Arial'}");
}
EDIT :
Je dois préciser que ces lignes sont exécutées toutes les 250 ms en fonction d'un message d'entrée provenant d'un autre sous-système. J'ai déjà emprunté cette voie et c'est une impasse. Voici le code d'erreur.