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

Discussion :

Univers de setCellWidget()

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Univers de setCellWidget()
    Bonsoir,

    Alors j'ai une question toute bête sur comment fonctionne la fonction setcellwidget(int,int,QDoubleSpinBox *) ?

    Parce que j'ai testé la chose suivante :

    => je crée une variable QDoubleSpinBox une fois en "non-pointeur" : je l'intègre au qtablewidget et ça bugge quand je clique sur plusieurs cellules
    En gros j'ai 1 seul QDoubleSpinBox pour toute les cellules du qtablewidget

    => je mets un new QDoubleSpinBox() dans la fonction setcellwidget() et miracle ça marche !

    Ma question : c'est parce que c'est set que c'est setté définitivement ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Autrement dit, je veux une et une seule doublespinbox pour toutes les cellules de mon tableau : alors pourquoi ça bugge c'est pas normal ?!

    En résumé j'ai testé avec et sans le new et ça ne marche qu'avec le new, mais voyez plutôt le code avec lequel ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    setcellwidget(int row,int column, new QDoubleSpinBox())
    Donc ici je me retrouve avec 50000 spinbox ce que je ne veux pas.

    Et si je crée la doublespinbox en entête (sans que ça soit un pointeur) et que je l'utilise elle-seule pour toute les cellules de mon qtablewidget alors ça bugge ça affiche une erreur qui renvoie au fichier qscopedpointer.h.

    En fait je n'ai rien compris car j'utilise aussi la fonction removecellwidget(int,int).

    Cordialement, Gizmo.
    Dernière modification par Invité ; 01/10/2013 à 10h53.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Confirmé ! J'ai vu dans la doc de la fonction cellwidget() : "Da table takes ownership of da widget" : donc cela signifie qu'une fois setcellwidget enclenchée, le widget devient la propriété du tableau, donc je ne sais pas comment la classe QTableWidget est codée à ce niveau-là, mais apparemment une fois qu'on a installé un widget sur une cellule c'est à vie : on ne peut utiliser le même widget pour d'autres cellules.
    Moi qui ne voulais utiliser qu'une seule spinbox pour toute les cellules de mon tableau me voilà grosjean comme devant !

    Eh ben perso je trouve cela vachement merdique à souhait et cela m'oblige à revoir mon code.

    Miséricorde et félonie !
    Dernière modification par Invité ; 06/10/2013 à 12h27.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bon,

    Je suis finalement arrivé à mes fins en créant une nouvelle spinbox à chaque double-clic sur la cellule, en vérifiant auparavant si la cellule contient déjà une spinbox ou pas.

    Mais il faut reconnaître que l'usage d'un QTableWidget est largement améliorable : en effet : j'avais envie de créer une seule spinbox pour toutes les cellules qui apparaît dans la bonne cellule quand on double-clic : quand on double-clic sur une autre cellule la spinbox disparaît de l'ancienne cellule mais en y laissant la valeur rentrée ; et réapparaît dans la cellule double-cliquée.

    Bon il faut dire aussi que j'ai Qt 4.7 et qu'il y a eu bon nombre d'améliorations dans la dernière version je ne sais pas...

    Bonne journée à vous.
    Cordialement, Gizmo.

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    En fait, toute la logique de Qt passe par le fait que tout élément parent devient forcément responsable des enfants qu'ils contient.

    Comme tous les éléments contenus sont de nature polymorphe, c'est normal :
    • D'un point de vue conceptuel, tout type intervenant dans une hiérarchie de classes a sémantique d'entité. Tous les types qui héritent de QObject ou de QWidget sont donc, par nature, non copiable et non affectable
    • Quoi que puisse te laisser penser ta fonction, setXXX, dés le moment où l'élément transmis en argument est dérivé de QWidget, il y a de fortes chances qu'il soit maintenu au niveau du parent sous la forme d'un... pointeur sur QWidget (voire, sur QObject )

    Si l'on ne veut pas se retrouver avec des fuites mémoire en tous sens, sans se retrouver avec un "manager global", il faut donc appliquer une politique stricte au niveau de la gestion des éléments enfants.

    La politique de Qt à ce point de vue est, très clairement, la moins mauvaise qui puisse exister : les parents détruisent automatiquement leurs enfants lorsqu'ils sont détruits

    Et pour détruire automatiquement leurs enfants, il n'y a qu'une solution : appeler delete sur les pointeurs de chaque enfant.

    C'est donc à nous de nous assurer que le parent pourra faire son travail sans que cela ne pose de problème : chaque fois qu'on lui fournit un nouvel enfant, il doit être créé par new
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Invité
    Invité(e)
    Par défaut
    Mmmmh... Défenseur de Qt non ?...

    Donc en gros si j'ai bien compris je dois éviter d'ouvrir ma grande gu... Surtout pour parler de choses que je ne connais pas.

    Et surtout de faire confiance en des gars (en l'occurrence ici les devs de Qt) qui ont largement plus d'expérience que moi en la matière et qui, eux, savent de quoi ils parlent.

    Avoues que tu le pensais un peu mais que tu t'es retenu de le poster.

    Bah de toute façon c'est plus moi qui ne sait pas me servir des fonctions qu'autre chose...

    Mais je dois reconnaître que la doc anglaise pourrait être un peu plus claire là-dessus quand même.

    Bonne soirée. Cordialement, Gizmo.

Discussions similaires

  1. CSS XHTML 1 STRICT et Internet Explorer : un univers dingue!
    Par tynmar dans le forum Mise en page CSS
    Réponses: 4
    Dernier message: 06/04/2006, 18h38
  2. RPG en ligne univers héroic fantasy
    Par spykiller dans le forum Projets
    Réponses: 23
    Dernier message: 19/01/2006, 11h05
  3. connection a une base de données dans univers Hibernate
    Par lilou77 dans le forum Hibernate
    Réponses: 10
    Dernier message: 26/10/2005, 10h48
  4. [Info] Nouvelle dans l'univers Eclipse
    Par hanane_iaai dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 13/12/2004, 16h54
  5. [CR] Est il possible de créer des univers avec Seagate Info?
    Par Frank dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 27/06/2002, 15h22

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