Slyken
Messages postés24Date d'inscriptionmardi 17 avril 2007StatutMembreDernière intervention11 mars 2010
-
11 mars 2010 à 23:51
pop70
Messages postés181Date d'inscriptionmardi 6 avril 2010StatutMembreDernière intervention 7 janvier 2012
-
6 avril 2010 à 12:27
Bonjour,
je suis en train de programmer un tetris en utilisant Qt, mais je bloque actuellement sur un petit problème.
J'ai une fonction updateGraphics() appelée à chaque seconde qui va se charger d'insérer dans un vector des QSvgWidget et les placer au bon endroit suivant un tableau d'entier.
Le problème c'est que je n'arrive pas à supprimer les QSvgWidget déjà dans mon vector, ce qui cause deux problèmes :
- quand je modifie la taille de ma fenêtre les nouveaux blocs s'affichent au bon endroit à la bonne dimension mais ceux précédemment créés ne s'effacent pas,
- vu que rien n'est supprimé, de plus en plus de QSvgWidget sont dessinés, ce qui ralenti fortement le programme.
Voilà le code (j'ai supprimé quelques passages mais à part ce problème de suppression, tout marche très bien) :
void Board::updateGraphics() {
//quelques essais, mais rien ne marche...
for(int i=0 ; ishow();
blocksBoardQSvg.back()->resize(blockSize, blockSize);
blocksBoardQSvg.back()->move(blockSize*j, blockSize*i);
}
}
Donc comment faire pour supprimer ces QSvgWidget ?
Merci.
pop70
Messages postés181Date d'inscriptionmardi 6 avril 2010StatutMembreDernière intervention 7 janvier 201210 6 avril 2010 à 12:27
La classe QVector (ou vector) possède deux fonctions:
.pop_back() : à l'inverse de push_back() il supprime le dernier élement du vecteur.
.remove(int index) : supprime un élément à une position du vecteur (index).
donc essaie blocksBoardQSvg->pop_back() (ou remove() si ce n'est pas le dernier qu'il faut supprimer).