IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

QTableWidget et cellWidget


Sujet :

Qt

  1. #1
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut QTableWidget et cellWidget
    Bonjour,
    J'utilise une QTableWidget où les celles contiennent des widgets (avec setCellWidget), la doc précise que lorsqu'on associe un widget à une cellule, la cellule devient parent de ce widget. J'ai besoin de déplacer des lignes dans cette table, donc pour cela je crée une nouvelle ligne vide puis je copie les pointeurs de mes widgets dans cette ligne. Ça fonctionne (la ligne de départ apparait vide, et la nouvelle ligne contient les widgets avec leurs valeurs).

    Par contre quand je supprime la ligne de départ (qui est devenue vide), elle supprime (ou semble le faire) également les widgets. Plus précisément, la nouvelle ligne apparait vide, par contre avec une boucle sur les cellules, elle semble toujours contenir les pointeurs des objets, et même le type du widget (QLineEdit, QComboBox etc, affiché par qDebug).

    La seule solution que je vois serait de faire des copies des widgets dans de nouvelles instances, mais c'est moins générique (car ça dépend du type du widget). Est-ce que quelqu'un aurait une autre solution ? S'il était possible d'annuler le "parent" de la ligne de départ par exemple.

    Merci d'avance !

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Points : 248
    Points
    248
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void QWidget::setParent ( QWidget * parent )
    devrai faire l'affaire

  3. #3
    Membre émérite
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Points : 2 834
    Points
    2 834
    Par défaut
    J'y pensais, sauf que je ne sais pas qui mettre comme parent =/ et comme dans la doc il est dit
    Sets the given widget to be displayed in the cell in the given row and column, passing the ownership of the widget to the table.
    Je suppose qu'à l'appel de la fonction setCellWidget, la QTableWidget appelle automatiquement setParent ?
    Edit : après test ça ne change rien, les widgets restent associés à la ligne de départ, et disparaissent si je la supprime.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 188
    Points : 248
    Points
    248
    Par défaut
    Bon j'ai testé avec setItem et takeItem et sa semble bien marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
     
        int nbRows = 12;
        int nbCol = 10;
     
        //creation de la QTableWidget
        QTableWidget tableWidget(nbRows, nbCol);
        for (int row=0 ; row < nbRows ; row++ ){
    	for (int column=0 ; column< nbCol ; column++){
    	    QTableWidgetItem *newItem = new QTableWidgetItem(QString("ligne %1, col %2").arg(row).arg(column));
    	    tableWidget.setItem(row, column, newItem);
    	}
        }
     
        // deplacement d'une ligne
        tableWidget.insertRow(6);//creation d'une ligne
        for (int column=0 ; column< nbCol ; column++){
    	tableWidget.setItem(6, column, tableWidget.takeItem(2,column));//on déplace tous les element de la ligne
        }
        tableWidget.removeRow(2);//suppression de l'ancienne ligne
     
        tableWidget.show();
        return a.exec();
    }
    Edit: je viens de tester avec un widget et il saute quand même

Discussions similaires

  1. QTableWidget, signal cellClicked et cellWidget
    Par haraelendil dans le forum Qt
    Réponses: 1
    Dernier message: 14/10/2011, 12h16
  2. [QTableWidget] Veux tu bien te fermer ?
    Par Gulish dans le forum Qt
    Réponses: 3
    Dernier message: 07/03/2008, 14h31
  3. Réponses: 3
    Dernier message: 01/02/2008, 14h12
  4. [Qt4] Bug bizarre avec QTableWidget
    Par Michaël dans le forum Qt
    Réponses: 12
    Dernier message: 26/04/2007, 16h48
  5. [Qt4] Interdire le double clic dans QTableWidget
    Par Michaël dans le forum Qt
    Réponses: 2
    Dernier message: 14/04/2007, 21h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo