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 :

Nommage des widgets

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur (aussi appelé "programmateur" ou "magicien")
    Inscrit en
    Octobre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur (aussi appelé "programmateur" ou "magicien")
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 101
    Points : 102
    Points
    102
    Par défaut Nommage des widgets
    Bonjour,

    J'ai un soucis avec le nommage de mes widgets. J'ai fait un fenêtre avec plusieurs widgets identiques, qui contiennent chacun un layout avec à l'intérieur des labels : Nom : Capture.PNG
Affichages : 250
Taille : 32,6 Ko
    Le problème est visible, en faisant des copier-coller Qt incrémente automatiquement le nom des widgets, c'est normal, mais arrivé au cinquième, il passe à 14 sans aucune raison. Les layout LAY_budget_ de 5 à 13 n'existe pas, donc ce n'est pas ca le problème, et en plus je ne peux pas renommer mon layout LAY_budget_5, comme je le voudrais!
    Voilà voilà...^^
    Delphi 7 et 10.3.2
    IBExpert et Firebird 2.5

    Fervent partisan de la méthode du canard en plastique .

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    Normalement (je ne suis pas fan du QtDesigner, donc je m'entoure des précautions d'usage ) QtDesigner devrait te permettre de modifier le nom des différents widgets que tu crées, et tu serais donc particulièrement bien inspiré de donner, pour chaque widget, un nom qui puisse indiquer aussi clairement que possible le rôle du widget en question dans ton interface.

    C'est, d'une certaine manière, moins important pour les QLabel (qui ne font que fournir des informations "fixées une bonne fois pour toutes", du moins, en théorie) que pour les widgets "réactifs" (comme le sont les boutons, les LineEdit, les combobox, et tous les autres widgets susceptibles de réagir aux actions effectuées par l'utilisateur), mais tu te rendra rapidement compte à l'usage que le fait que chaque widget porte un nom qui en définit clairement l'utilité te facilitera énormément la tâche

    Ceci étant dit ... En relisant un peu ton image, je ne peux m'empêcher de remarquer que tous les layout verticaux contiennent exactement les même informations.

    Dés lors, pourquoi ne pas -- tout simplement -- créer un widget personnalisé qui "engloberait" le layout vertical et tout ce qu'il contient (comprend : les trois labels en question) De cette manière, tu n'aurais plus qu'à rajouter ce widget dans le layout du widget parent autant de fois que tu veux l'y voir apparaitre

    Et, si tu décide de t'entêter dans l'utilisation de QDesigner, tu peux même développer ce widget sous la forme d'un plugin
    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

  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
    Comme dit ci dessus tu pourras éviter le copier coller en créant un widget que tu dupliques (soit dans QtDesigner, soit en les créant dans le code).
    Je remarque aussi que tu mets tes QLabel dans un layout vertical qui est placé dans un QWidget, mais tu peux directement appliqué un layout à un QWidget, cad qu'il organise dans un layout ses enfants (ici tes QLabels). Dans QtDesigner plutôt que créer un layout, ou sélectionner tes 3 QLabel et appliquer un layout, tu peux sélectionner directement ton QWidget (seul) et appliquer un layout (qui n'aura pas de nom).

    Quant à ton problème de nommage je ne vois pas ce qu'il se passe, moi je peux renommer les layouts sans problème. Et s'il est nommé avec 14 au lieu de 5 tu as peut être créé puis supprimé d'autres layouts avant celui ci, QtDesigner garde un compteur global il me semble. Incrémenté à chaque nouveau layout mais jamais décrémenté.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur (aussi appelé "programmateur" ou "magicien")
    Inscrit en
    Octobre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur (aussi appelé "programmateur" ou "magicien")
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 101
    Points : 102
    Points
    102
    Par défaut
    Merci pour vos réponse!
    Ymoreau : Oui j'avais oublié qu'on pouvait organiser directement les enfants dans un layout... c'est effectivement beaucoup plus simple^^. Et oui j'en avais déjà créé avant mais si c'est bien ça le problème il n'aurait pas pu m'incrémenter de 1 à 4...
    koala01 : Pour le nom des widgets, j'ai décris ce qu'il affiche au mieux, en faisant en sorte que ça ne soit pas trop long. Et effectivement ça serait intéresssant d'avoir un widget perso mais sur ce plan je sèche... mais je vais faire mes recherches (comme 50% du temps quand je code). ça simplifierais beaucoup de chose (car il y a plusieurs ensemble dans mon programme où ça serait avantageux de faire aussi un widget perso.

    Bref, je me lance et je vous redis si j'ai des problèmes
    En attendant je mets le sujet en résolu!

    EDIT: J'ai cherché pour faire un widget perso et je n'ai trouvé quasiment que ça : http://doc.qt.io/qt-4.8/designer-cre...m-widgets.html
    Et j'ai du mal à comprendre... En plus je n'ai rien trouvé en français.

    Mais j'ai eu une autre idée. Y a-t-il un moyen d'intégrer un ui dans un autre ui ? Je m'explique: je créerais mon widget avec Qt Designer (un .cpp, un .h et un .ui), puis je dupliquerais autant de fois que voulu ma classe obtenue dans ma fenêtre principale. Par code il me semble que c'est simple à faire, j'ai déjà créé des fenêtres en codant à la main, mais je voudrais pouvoir l'ajouter avec Qt Designer. Y a moyen ??
    Delphi 7 et 10.3.2
    IBExpert et Firebird 2.5

    Fervent partisan de la méthode du canard en plastique .

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Tu pourrais peut être aussi t'intéresser à cet exemple-ci ou à celui-ci.

    Mais, en gros, tu va voir que c'est tout simple :

    En premier lieu, tu vas créer le widget personnalisé dont tu as besoin, sous une forme qui, dans ton cas, ressemblerait à (fichier mywidget.h, nom à adapter)
    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    #ifndef MYWIDGET_H
    #define MYWIDGET_H
    /* parce qu'on veut créer un widget, notre classe dérivera de QWidget */
    #include <QWidget>
    /* parce qu'on veut créer un plugin et qu'on a besoin de la macro
     * QDESIGNER_WIDGET_EXPORT
     */
    #include <QtUiPlugin/QDesignerExportWidget>
    class QLabel; // on a besoin de QLabel
    /* MyWidget, parce que je ne sais pas à quoi va servir ce widget...
     * un nom plus adapté (de préférence en anglais, ce serait cool :D
     */
    class QDESIGNER_WIDGET_EXPORT MyWidget: public QWidget{
        /*classique quand on crée des widget... ca fait un tas de truc dont
         * on ne veut pas s'occuper
         */
        Q_OBJECT
    public:
        /* constructeur de la classe... correspond au nom de la classe "him self"
         */
        explicit MyWidget(QWidget * parent = 0);
        /* d'habitude, on les placerait sans doute dans l'accessibilité privée, mais, ici,
         * nous devons permettre à l'utilisateur de la classe d'y avoir accès depuis
         * n'importe où
         * 
         * En outre, la notation hongroise, j'en suis pas fan... 
         * et il serait très utile de nommer tes label de manière à indiquer clairement
         * l'information qu'il représentent (parce que bugd, incr et mont, ca ne me dit
         * pas grand chose ;) )... de préférence en anglais ;)
         */
       QLabel * bugd;
       QLabel * incr;
       QLabel * mont;
     
    };
    #endif
    (bon, il y aura peut être des choses à rajouter, mais, dans un premier temps, on va s'en tenir là )
    Le fichier d'implémentation (mywidget.cpp, nom à adapter) va fournir l'implémentation du constructeur et ressembera à
    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
    #include <mywidget.h>
    /* parce qu'on a besoin de l'implémentation de QLabel et de QVBoxLayout */
    #include <QLabel>
    #include <QVBoxLayout>
     
    MyWidget::MyWidget(QWidget * parent):QWidget(parent){
        /* on crée effectivement nos QLabel */
        budg = new QLabel("/* texte du label */");
        incr   = new QLabel("/* texte du label */");
        mont = new QLabel("/* texte du label */");
        /* puis on crée l layout */
        QVBoxLayout * layout = new QVBoxLayout;
        /* on y ajoute les labels*/
        layout->addWidget(bugd);
        layout->addWidget(incr);
        layout->addWidget(mont);
    }
    FINI !

    Enfin : avec cela, tu peux rajouter les fichiers mywidget.h et mywidget.cpp à ton projet, et tu pourras déjà utiliser ton widget lorsque tu abandonnera le designer

    L'étape suivante consiste à créer un plugin qui pourra être utilisé par le designer, et pour cela, je vais te laisser voir les exemples que je t'ai donné (pense que, tout en bas, il y a moyen de voir le contenu des différents fichiers )
    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
    Membre régulier
    Homme Profil pro
    Développeur (aussi appelé "programmateur" ou "magicien")
    Inscrit en
    Octobre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur (aussi appelé "programmateur" ou "magicien")
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 101
    Points : 102
    Points
    102
    Par défaut
    Aaaaah... c'est beaucoup plus simple comme ça je vais tester ça^^ en plus je crois avoir trouvé un moyen de créer mon widget avec le designer... on verra bien !

    EDIT: j'ai donc regardé un peu, et j'ai décidé de faire directement un plugin, en créant un nouveau projet de type plugin pour QtDesigner 4. Maintenant que je comprends comment ça marche c'est plus simple. Par contre, j'ai pas trop compris comment utiliser le widget dans un autre projet. D'abord, à la compilation du plugin, il demande un compilateur, et d'après mes recherches, ça fonctionne avec qmake. C'est donc ce que j'ai mis. Ensuite, dans le projet où je veux l'utiliser, je rajoute un widget, puis je le promeus, en mettant comme nom de classe le nom général de mon plugin (widgets_for_budget) :
    Nom : Capture.PNG
Affichages : 218
Taille : 22,2 Ko
    Mais dois-je rajouter certains fichiers dans le dossier du projet!?
    Merci d'avance !! (d'ailleurs merci pour la rapidité de réponse^^)
    Delphi 7 et 10.3.2
    IBExpert et Firebird 2.5

    Fervent partisan de la méthode du canard en plastique .

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur (aussi appelé "programmateur" ou "magicien")
    Inscrit en
    Octobre 2014
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur (aussi appelé "programmateur" ou "magicien")
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 101
    Points : 102
    Points
    102
    Par défaut EDIT
    Finalement j'ai trouvé ^^
    J'ai fais mon widget en mettant les fichiers dans mon projet, puis dans la fenetre principale du projet je promeus un widget en mon widget perso. C'est maintenant que je ne comprenais pas. le widget ne s'affiche pas!! il s'affiche seulement à la compilation du projet...
    Delphi 7 et 10.3.2
    IBExpert et Firebird 2.5

    Fervent partisan de la méthode du canard en plastique .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Nommage des variables] Y a-t-il une normalisation ?
    Par Oberown dans le forum Framework .NET
    Réponses: 1
    Dernier message: 22/08/2006, 17h10
  2. Exporter des widgets depuis une DLL
    Par zebiloute dans le forum wxWidgets
    Réponses: 5
    Dernier message: 31/07/2006, 08h14
  3. [WinCVS] Gestion du nommage des révisions
    Par effree dans le forum CVS
    Réponses: 1
    Dernier message: 15/05/2006, 23h46
  4. Regle de nommage des versions
    Par Jay dans le forum Windows
    Réponses: 5
    Dernier message: 24/11/2003, 09h26

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