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()

  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 à 11h53.

  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 à 13h27.

  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.

  7. #7
    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
    Citation Envoyé par gizmo27 Voir le message
    Mmmmh... Défenseur de Qt non ?...
    Défenseur, je n'irai pas jusque là

    Connaissant plusieurs framework équivalents, c'est au mieux celui que j'apprécie le plus .

    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.
    Je ne l'avouerai jamais pour la simple et bonne raison que je ne le pensais absolument pas.

    J'ai commencé par t'expliquer le "système de pensée Qt", qui vaut ce qu'il vaut, sans plus.

    Puis je t'ai expliqué le pourquoi de ce "système de pensée", parce que:
    1. ce n'est pas forcément évident
    2. c'est un système de pensée qui se tient conceptuellement parlant

    Par la suite, je t'ai expliqué ce que l'on gagne avec ce système de pensée avant de te donner mon opinion personnel (qui n'engage que moi) et d'en tirer les conclusions.

    Je n'ai donc fait que suivre un processus tout à fait normal pour un forum qui a pour vocation non seulement de t'aider à faire ce que tu veux mais aussi de t'aider à comprendre pourquoi tu dois le faire de la manière indiquée
    Bah de toute façon c'est plus moi qui ne sait pas me servir des fonctions qu'autre chose...
    Sans doute

    Et c'est bien pour cela que j'ai pris la peine de t'expliquer de "système de pensée Qt" (du moins, la partie qui correspond à ton besoin spécifique ) afin de te donner l'occasion de comprendre que la logique à mettre en place sera toujours à peu près la même, une même cause ayant systématiquement les mêmes effets dans les même circonstances
    Mais je dois reconnaître que la doc anglaise pourrait être un peu plus claire là-dessus quand même.
    Elle a été "remaniée" lors du passage à la version 5 et je dois avouer que le remaniement en question a rendu la découverte de ces aspects au travers de la doc plus compliquée.

    Avant, il était assez "facile de retomber", si pas sur la justification telle que je te l'ai donnée, au moins sur l'information en elle même
    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

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

    Merci à toi.

    Ne t'inquiètes pas je ne te ferai pas dire ce que tu n'as pas dit

    Et puis si j'ai choisit Qt ça n'est pas pour rien.

    Non là c'était plutôt une autocritique de moi-même où j'explique qu'il y a des jours où j'aime l'ouvrir sans me demander (personne n'est parfait).

    Ce que je regrette un peu c'est que Qt ne soit pas mis plus en avant que ça sur votre forum : même si la plupart des devs ont élu Java ça n'est pas une raison pour mettre Qt en dernier onglet du langage C++ (d'autant plus qu'il est petit et c'est tout juste si on l'aperçoit).

    Perso après c'est juste mon avis ça n'engage que moi mais pour moi Qt mérite une meilleure place sur ce forum.

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, 19h38
  2. RPG en ligne univers héroic fantasy
    Par spykiller dans le forum Projets
    Réponses: 23
    Dernier message: 19/01/2006, 12h05
  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, 11h48
  4. [Info] Nouvelle dans l'univers Eclipse
    Par hanane_iaai dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 13/12/2004, 17h54
  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, 16h22

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