Bienvenue sur le forum !

Si vous souhaitez rejoindre la communauté, cliquez sur l'un de ces boutons !

Qt 5 : 5.9.1 - Qt Creator : 4.3.1 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

[Qt4] Nommage des layouts

Bonjour à tous,

J'utilise le designer de Qt4 et j'ai remarqué amèrement qu'il était impossible de nommer soi-même les layouts que l'on crée (pour ce qui est le l'intégration dans visual studio: aussi bien avec les 3 outils layouts de la Qt Toolbox ou avec les 5 outils de la barre d'outil Qt/Visual Studio).
Résultat : comment ajouter à l'exécution des widgets ou des layouts dans un layout créé dans le designer ? On ne connaît pas son nom ! (celui-ci est susceptible de changer à chaque appel de uic).
Si qqun a des éclaircissement, je suis preneur !

merci d'avance

Réponses

  • A ma connaissance, c'est impossible, et c'est bien regrettable.

    P@sNox,
  • ca mérite bien une suggestion sur le site de Trolltech non?

    par contre je n'ai pas trouvé comment en déposer une ; je suis seulement parvenu à déposer un billet pour rapporter un bug, mais pas de suggestion...

    (help : )
  • Si tu parles bien du task-tracker, alors, tu étais au bon endroit :)
  • ouais voila le tasktracker :)
    ben j'ai pas accès ou alors g pas trouvé
    par contre le bugtracker je peux y laisser des trucs mais ensuite les mecs sont obligé de les virer ou de les déplacer vers le tasktracker :///
  • Je me demande si c'est pas eux qui trie après réception.
    J'invoque Dimitri ou thierryb :)
  • C'est tout à fait ça. Rien n'est viré. Les bugs et suggestions sont entrés dans le bugtracker mais ne sont pas visible en externe. Après tri et nettoyage, ils deviennent des tasks visibles (ou pas si par exemple le client ne le souhaite pas).
  • Merci pour la petite explication ;)
  • okayyyyyyyyy merci pour l'éclaircissement
  • bouais ben j'ai posté ce qu'il fallait sur le tasktracker et voilà la réponse que j'obtiens (chapeau pour le delai cependant) :
    > Short description:
    > Cannot specify a name for a layout in Qt Designer
    >
    > What I did:
    > It would be very useful if Qt Designer allowed user to specify an
    > objet name for any layout that is created manually. Why is it
    > impossible yet?
    > Uic has to choose random names for layouts and thus they are basically
    > unusable under Qt from the code (cannot add/remove any widget/layout
    > into/from a layout).

    Thank you for your bug report. This is actually a known issue, which has
    been considered and unfortunately Rejected!
  • Est-ce qu'une décision de ce genre peut être discutée/contestée/expliquée ?
    Le système de remontée de bug permet-il un fil de discussion ?
  • J'imagine qu'il faudrait répondre au mail en question et demander des éclaircissements.

    Par contre il n'existe de place publique pour débattre de ce genre de problèmes, ce qui est regrettable par certains côtés - mais salutaire par d'autres ?

    En tout cas, peut-être que dans ce cas particulier, le cas d'utilisation est considéré comme marginal, pas assez courant pour rendre nécessaire un changement. Ou alors peut-être y-a-t-il un moyen de contourner le problème - mais je ne sais pas lequel, je n'ai jamais beaucoup réfléchi au problème.
  • Je comprend pas bien pourquoi tu veux connaitre le nom d'un layout ?
    Connaitre le nom du widget ne suffit t'il pas ?
    Ensuite un nom_du_widget.layout() recupere le layout !! et dans ce cas on se **fout** du nom du layout, ou alors j'ai pas compris ton probleme!

    Ludo
  • C'est juste moins pratique de faire ça :)
    C'est plus facile de nommer un layout.

    Mais dans ce cas, il ne faut pas s'appuyer sur les layout automatiques ;)
    Ceci dit, la feature serait présente que ça serait pas plus mal effectivement. Je suis curieux de connaître la raison du refus si tu l'obtiens.
  • Je vais répondre à ce mail et vous tenir au courant, mais je doute qu'on me reponde favorablement ou qu'on me reponde tout court :)
    On peut effectivement récupérer le layout d'un widget mais que faire si on veut préparer un layout vide dans le Designer afin de le remplir a l'exécution ? Aucun widget ne permet de récupérer simplement ce layout !

    Pour info, un ami voulait faire une appli de monitoring de réseau ; il voulait que chaque connexion réseau soit matérialisée par un widget pendant sa durée de vie, ces widgets étant affiché de manière juxtaposée dans un même layout. Lors d'une ouverture de connexion, un widget était créé, évoluait pendant la vie de la connection et disparaissait lorsque la connexion était fermée.
  • Dans ce cas, fais comme moi: code only ;)
  • kellyb said:
    Pour info, un ami voulait faire une appli de monitoring de réseau ; il voulait que chaque connexion réseau soit matérialisée par un widget pendant sa durée de vie, ces widgets étant affiché de manière juxtaposée dans un même layout. Lors d'une ouverture de connexion, un widget était créé, évoluait pendant la vie de la connection et disparaissait lorsque la connexion était fermée.
    Mais l'intérêt de créer le layout dans Qt Designer dans ce cas ?
  • bah utiliser le designer pour ce qu'il est: simplifier la vie des développeurs, amateurs notamment :)
    sinon il est vrai que pour ce genre de trucs un peu pointus, on peut tout coder manus militari...
  • lud42fr said:
    Je comprend pas bien pourquoi tu veux connaitre le nom d'un layout ?
    Connaitre le nom du widget ne suffit t'il pas ?
    Ensuite un nom_du_widget.layout() recupere le layout !! et dans ce cas on se **fout** du nom du layout, ou alors j'ai pas compris ton probleme!

    Ludo
    C'est justement ca le probleme!
    layout() te renvoi un QLayout, alors que ton layout peut etre un QVBoxLayout, un QHBoxLayout, un QGridLayout etc, dans le cas ou c'est toi qui developpe l'application et les forms ca pose pas de soucis.

    Quelqu'un qui attends des forms d'un collegue est obligé d'ouvrir ce form pour connaitre les objects contenus, et pour ajouter des objects dynamiquement dans ces forms c'est "galere".

    Ca fais beaucoup de boulot, alors que le fait d'avoir un nom pour les layouts aurait permis de travailler plus efficacement ( et plus rapidement ;) )

    C'est d'ailleurs regrettable qu'il ( trolltech ) le cache, car QLayout herite bien de QObject non ?, de ce fait son nom devrait etre accessible depuis designer :|

    Pourquoi ce refus de la part de trolltech ?!

    P@sNox,
  • Je permet d'insister ;), mais je ne vois toujours pas le problème.
    Bon je suis bien d'accord que pouvoir nommer ses layouts devrait être possible et que le refus de Trolltech est etonnant !
    Mais sinon ...
    layout() te renvoi un QLayout, alors que ton layout peut etre un QVBoxLayout, un QHBoxLayout, un QGridLayout etc, dans le cas ou c'est toi qui developpe l'application et les forms ca pose pas de soucis.

    Quelqu'un qui attends des forms d'un collègue est obligé d'ouvrir ce form pour connaitre les objects contenus, et pour ajouter des objects dynamiquement dans ces forms c'est "galere".
    Ok,et alors ;) - Admettons que l'on puisse nommer les layouts. mon collègue me file une form et me dit "Le layout central se nomme CentralLayout et c'est un QVBoxLayout".
    Ok c'est cool, je peux ecrire QVBoxLayout *gl=form.CentralLayout;gl->blablabla et ce sans ouvrir la form

    Maintenant, je ne peux pas nommer les layouts.mon collegue me file une form et me dit "Le widget central se nomme CentralWidget et son layout c'est un QVBoxLayout".
    Je peux donc ecrire QVBoxLayout *gl=static_cast(form.CentralWidget.layout());gl->blablabla et ce sans ouvrir la form aussi.

    A moins d'un killer-example, pour moi c'est un faux probleme.

    Ludo
  • Si on pouvait nommer les layouts, on ecrirait directement nomlayout->blabla, il n'y aurais pas besoin de declarer un pointer, le recuperer et bosser.

    Le 2eme exemple est bon, c'est un probleme dans le sens ou ca alourdit le code inutilement ;)

    P@sNox,
  • Je suis d'accord avec Kellyb, d'autant que le slogan Qt est "Code less, create more".

    Et d'une manière générale, j'ai l'impression qu'il manque plein de propriétés aux layouts (géométrie, contraintes, alignements, etc.) qui sont accessibles en code, mais pas dans le designer.

    Peut-être que la pratique n'est pas convenable mais comment faire si j'ai deux layouts dans un widget?
  • BlaX said:
    Je suis d'accord avec Kellyb, d'autant que le slogan Qt est "Code less, create more".

    Et d'une manière générale, j'ai l'impression qu'il manque plein de propriétés aux layouts (géométrie, contraintes, alignements, etc.) qui sont accessibles en code, mais pas dans le designer.

    Peut-être que la pratique n'est pas convenable mais comment faire si j'ai deux layouts dans un widget?
    C'est impossible ;)

    La layout existant sera detruit/deparenté du widget en question.

    P@sNox,
  • Aargh. On pouvait toujours essayer!

    Pourquoi le designer permet d'ajouter plusieurs layout, dans ce cas? Je peux en drag'n'dropper tant que je veux. Ils ont l'apparence d'un cadre rouge que je peux déplacer et redimensionner. Si je jette des boutons dedans, ils s'alignent correctement. Enfin, le "Object Inspector" me dit que j'ai un QWidget qui possède plusieurs QLayouts.
  • Quand tu drag des layouts à partir de la palette de composant, ca creer un qwidget et lui associe un layout.

    Donc pas plusieurs layout pour le meme widget ;)

    P@sNox,
  • D'accord! J'ai compris.

    L'objet qui porte le nom "gridLayout" qu'on utilise dans le code, c'est en réalité le widget intermédiaire qui encapsule le layout. Ce qui manque, c'est de pouvoir le renommer.

    Kellyb, je pense que le nom du layout n'est pas susceptible de changer à chaque appel de uic puisque le nom du widget qui encapsule le layout est dans le .ui. Au pire, pour le renommer, il suffit d'éditer le .ui et de le renommer à la main. Designer le prend alors également en compte.
  • Le nom du layout est suceptible de changer si de nouveaux layout sont ajouté.
    Une fois le form terminée, tu peu regrder le nom donné aux layout dans le fchier generé par uic et t'en servir.

    P@sNox,
  • ...mais c'est le comble pour un utilisateur de Qt...
Connectez-vous ou Inscrivez-vous pour répondre.