[Qt] QTableWidget et QTableWidgetItem

Voir le sujet précédent Voir le sujet suivant Aller en bas

[Qt] QTableWidget et QTableWidgetItem

Message  Dj x-fuse le Lun 02 Avr 2012, 20:54

Bonjour à tous,

J'ai un soucis avec les QTableWidget. Je sais qu'il n'est possible d'assigner qu'un QTableWidgetItem par case du QTableWidget. Enfin, je veux surtout dire qu'avec un QTableWidgetItem je ne peux pas définir deux cases de mon tableau.

J'ai donc créé un vecteur de QTableWidgetItem pour placer les images facilement, et assigner chaque item à chaque case du tableau.

J'ai donc ce code, mais j'ai que la première case qui s'affiche (comme si j'assignais le même item à plusieurs cases). Quelqu'un peut-il me dire où sa foire ?

Merci

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [Qt] QTableWidget et QTableWidgetItem

Message  smb le Lun 02 Avr 2012, 21:41

Dj x-fuse a écrit:Bonjour à tous,

J'ai un soucis avec les QTableWidget. Je sais qu'il n'est possible d'assigner qu'un QTableWidgetItem par case du QTableWidget. Enfin, je veux surtout dire qu'avec un QTableWidgetItem je ne peux pas définir deux cases de mon tableau.

J'ai donc créé un vecteur de QTableWidgetItem pour placer les images facilement, et assigner chaque item à chaque case du tableau.

J'ai donc ce code, mais j'ai que la première case qui s'affiche (comme si j'assignais le même item à plusieurs cases). Quelqu'un peut-il me dire où sa foire ?

Merci

Je crois que le petit code suivant te guidera vers le pourquoi du comment, enfin j'espère !

Code:

#include <iostream>
#include <vector>
using namespace std;

int main() {
   vector < vector <int *> > ti (4, vector <int *> (6,new int(0)));

   for ( unsigned i=0; i<4; ++i) {
      for ( unsigned j=0; j<6; ++j ) {
         cout<<ti[i][j]<<" ";
      }
      cout<<endl;
   }
   return 0;
}
Wink

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [Qt] QTableWidget et QTableWidgetItem

Message  Dj x-fuse le Lun 02 Avr 2012, 21:54

Pourquoi chaque int ont la même référence ? Sont-ils tous stockés dans une seule case mémoire qui représente le vecteur ?
Du coup, une référence pour plusieurs cases : fonctionne pas. Donc pas de vecteur, mais d'autre part il n'y a pas d'utilité du vecteur ici.

Voici donc le code fonctionnel cette-fois

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [Qt] QTableWidget et QTableWidgetItem

Message  smb le Lun 02 Avr 2012, 22:09

Dj x-fuse a écrit:Pourquoi chaque int ont la même référence ? Sont-ils tous stockés dans une seule case mémoire qui représente le vecteur ?
Du coup, une référence pour plusieurs cases : fonctionne pas. Donc pas de vecteur, mais d'autre part il n'y a pas d'utilité du vecteur ici.

Je ne comprends pas trop bien ton charabia mais ce que je peux dire est ceci :

Code:
vector < vector <int *> > ti (4, vector <int *> (6,X));

X est la valeur d'initialisation de chaque élément du tableau.

Si X est new int(0) tous les éléments seront initialisés avec la même adresse.

Ceci dit, c'est résolu, non ?

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [Qt] QTableWidget et QTableWidgetItem

Message  Dj x-fuse le Lun 02 Avr 2012, 22:46

Oui oui, cette notion là je la comprend parfaitement. Mon problème n'est pas l'initialisation du vecteur mais la lecture de celui-ci en RAM.
Ce code me donne des adresses mémoire :
Code:
cout << ti[i][j] << " ";
Donc par déduction je me dis que le contenu en [i][j] est une adresse mémoire pointant vers chaque int.
Le problème, ce sont toutes les mêmes adresse mémoire. Pourquoi ?

PS : sinon oui, sans utiliser de vecteur (et donc un code moins lourd), j'arrive à un bon résultat.

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [Qt] QTableWidget et QTableWidgetItem

Message  smb le Lun 02 Avr 2012, 22:57

Dj x-fuse a écrit:Oui oui, cette notion là je la comprend parfaitement. Mon problème n'est pas l'initialisation du vecteur mais la lecture de celui-ci en RAM.
Si, justement, ton problème est la mauvaise compréhension que tu as pour une initialisation du genre de ceci :
Code:
vector < int * > vptr (10, new int(5) );
Touts les éléments du vecteur sont initialisés à la même valeur et donc dans ce cas ci à la même adresse !

Pourquoi ?

Parce que c'est comme ça !

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [Qt] QTableWidget et QTableWidgetItem

Message  Dj x-fuse le Lun 02 Avr 2012, 23:06

Donc il n'y a pas de réplication du code
Code:
new int(5)
?
Car j'aurais cru que
Code:
vector < int * > vptr (10, new int(5) );
est équivalent à
Code:
vptr[0] = new int(5);
vptr[1] = new int(5);

Dj x-fuse

Nombre de messages : 658
Age : 27
Prénom : Jonathan
Statut : 4ième sécu
Localisation : IRL
Date d'inscription : 18/10/2008

Revenir en haut Aller en bas

Re: [Qt] QTableWidget et QTableWidgetItem

Message  smb le Mar 03 Avr 2012, 08:23

Dj x-fuse a écrit:Donc il n'y a pas de réplication du code
Code:
new int(5)
?
Car j'aurais cru que
Code:
vector < int * > vptr (10, new int(5) );
est équivalent à
Code:
vptr[0] = new int(5);
vptr[1] = new int(5);
Et bien non !

L'allocation est faite une seule fois et l'adresse obtenue est copiée dans chaque élément !

C'est assez clair ici

explicit vector ( size_type n, const T& value= T(), const Allocator& = Allocator() );
Repetitive sequence constructor: Initializes the vector with its content set to a repetition, n times, of copies of value.

smb

Nombre de messages : 1035
Age : 64
Prénom : Stéphan
Statut : Don de sang, don de vie!
Localisation : Spy
Date d'inscription : 23/01/2007

Revenir en haut Aller en bas

Re: [Qt] QTableWidget et QTableWidgetItem

Message  Contenu sponsorisé Aujourd'hui à 12:34


Contenu sponsorisé


Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum