[QT C++] créer un tableau de QLabel?

Fermé
Slici Messages postés 428 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 26 octobre 2013 - 4 janv. 2009 à 15:03
 Dhampir - 29 oct. 2009 à 09:50
Bonjour,
J'aimerai créer un tableau de QLabel seulement je ne sais pas trop comment le déclarer et surtout comment le manipuler...

pour la déclaration j'ai tenté :

puis dans le .cpp :

QLabel *Echi[4];

Le programme compile correctement mais lorsque j'essaye de manipuler mon tableau, par exemple en faisant :

Echi[1]->clear();

le programme plante...

Mon tableau est-il correctement initialisé ou faut-il utiliser une autre méthode?

Comment manipuler un tel tableau?

D'avance merci !

-Slici-

3 réponses

Au lieu d'utiliser un tableau de QLabel, il est, dans la philosophie de Qt voire du C++, plus judicieux d'utiliser des listes.

Déclaration:
QList<QLabel*> listLabel;
Remplissage:
listLabel << new QLabel ("texte", parent);
Utilisation:
listLabel[index]->setText ("nouveauTexte");
Nota: Si on n'a pas besoin de modifier le texte du label, ce qui est souvent le cas, il est inutile de mémoriser le pointeur sur les labels créés, car ils seront automatiquement supprimés lors de la suppression du parent (philosophie Qt).
6
togodo Messages postés 148 Date d'inscription vendredi 19 septembre 2008 Statut Membre Dernière intervention 19 août 2009 8
4 janv. 2009 à 19:46
Attends j'ai fais ca il y a pas longtemps et ca marchait.
2
togodo Messages postés 148 Date d'inscription vendredi 19 septembre 2008 Statut Membre Dernière intervention 19 août 2009 8
4 janv. 2009 à 19:54
Bon c'était un tableau à deux dimensions contenant des pointeurs de QLabel.
QLabel ***label; // pour la déclaration

//initialisation

label = new QLabel**[6];
	for(int i=0;i<6;i++)
	{
		label[i]=new QLabel*[7];
	}
	for(int i=0;i<6;i++)
	{
		for(int j=0;j<7;j++)
		{
			label[i][j]=new QLabel;
			label[i][j]->setText("");
                        label[i][j]->setPixmap(QPixmap("c:/images/casevide.jpg"));
			gridLayout->addWidget(label[i][j],i+1,j+0);
		}
	}
l'utilisation
 
label[j][i]


Donc pour un normale ca donne


QLabel **label; // pour la déclaration

//initialisation

label = new QLabel*[6];
	for(int i=0;i<6;i++)
	{
		label[i]=new QLabel("");
	}
l'utilisation
 
label[j]->

0
Dhampir > togodo Messages postés 148 Date d'inscription vendredi 19 septembre 2008 Statut Membre Dernière intervention 19 août 2009
29 oct. 2009 à 09:50
salut!
je viens de voir cette methode, j'ai essayé de l'appliquer a mon cas:
je dois faire un echiquier 8*8.
en modifiant les parametres de boucle, il compile, se lance, mai m'affiche pas mes label (qui sont des images)ci joint, mon code:


int main( int argc, char** argv )
{
QApplication app(argc, argv);
MaFenetre fenetre;
QLabel ***label; // pour la déclaration
QGridLayout * gridLayout =new QGridLayout;
//initialisation

label = new QLabel**[8];
for(int i=0;i<8;i++)
{
label[i]=new QLabel*[8];
}
for(int i=0;i<8;i++)
{
for(int j=0;j<8;j++)
{
label[i][j]=new QLabel;
label[i][j]->setPixmap(QPixmap("/images/Chess_pawnb_icon.png"));
gridLayout->addWidget(label[i][j],i,j+0);
}
}
fenetre.setLayout(gridLayout);
// fenetre.commencer_partie();
fenetre.show();

return app.exec();
}

si jamais tu pouvais m'aidé, ça serait super!
0
Slici Messages postés 428 Date d'inscription lundi 7 mai 2007 Statut Membre Dernière intervention 26 octobre 2013 86
4 janv. 2009 à 20:19
merci beaucoup de votre aide, je vais essayer ca !
0