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.4.0 - Qt Installer : 2.0.3 - JOM : 1.1.2 - Qt Build suite : 1.7.0 - VS Qt 5 : 2.0.0

[Qt3] Qframe ?

Bonjour je recherche a faire un programme sous qt utilisant les frame mais je n'arrive pas a utliiser la class Qframe. Si qq1 a un exemple simple à me transmettre ou un lien qui m'expliquerai etape par etape comment realiser des frame ca serait formidable.

je vous remercie

bonne journée

Réponses

  • Qu'est-ce que tu entends par "Frame". Une frame en Qt est un conteneur (c'est à dire un widget pouvant contenir d'autre widget) qui permet entre autre chose de modifier l'apparence de sa bordure. Cette classe est aussi très intéressantes pour créer un nouveau widget de toute pièce... mais ça dépasse peut être le cadre de ce que tu veux faire.

    Parce qu'avec Qt designer, tu peux ajouter des frames sans problèmes...
    Est-ce que tu ne penses pas plutôt à des onglets ?

    Dans tous les cas, précise un peu ce que tu veux en faire, ce que tu imagines...
  • Je souhaite faire sur la gauche de mon programme un menu composé de quelques boutons. chaque bouton affichant une page différente sur la droite de mon programme. La disposition serait a peu pret la meme que celle qu'on trouve sur des sites internet. un bouton affiche une page différente, mais je ne veux pas utiliser d'onglets pour cela pour le moment.

    J'ai vu sous qt designer qu'il etait possible dans la fenetre de creer des frames, mais je ne connais pas ensuite le code qui s'y applique. Voila tout mon probleme.
  • OK, je comprends mieux ce que tu veux faire.

    Il faut que tu utilises un WidgetStack pour la partie droite. C'est un widget qui contient plusieurs "calque" numérotées, un seul calque étant affiché à la fois.
    Pour afficher un calque, il suffit de faire raiseWidget(numero_du_calque).

    Tu peux même coupler ça avec un ButtonGroup. En effet, un ButtonGroup contient plusieurs bouton (auxquels tu peux associer un numéro) ainsi que signal clicked(int), qui renvoie le numéro du bouton cliqué.
    C'est parfait pour ce que tu veux faire...

    Et tu peux faire tout ça dans le designer en plus ;)

    Si tu vois pas trop ce que je veux dire, j'expliquerais plus en détail.
  • Je souhaite faire sur la gauche de mon programme un menu composé de quelques boutons. chaque bouton affichant une page différente sur la droite de mon programme. La disposition serait a peu pret la meme que celle qu'on trouve sur des sites internet. un bouton affiche une page différente, mais je ne veux pas utiliser d'onglets pour cela pour le moment.
    Attention, un QFrame n'est pas un frame "html"...
  • oki merci je vais chercher a utiliser WidgetStack now :). Je reviens des que je me suis plus documenté dessus. merci de votre aide cher ami :)
  • bon j'ai essayé j'y arrive pas :( non plus. je dois pas être doué :(. Meme avec WidgetStack. personne aurais juste un exmple please. Je dois absolument comprendre ca pr faire mon projet :(

    Merci d'avance :)
  • On ne s'affole pas...
    Je vais te détailler toutes les étapes nécessaires... demain, parce que là, je n'ai pas QtDesigner sous la main.
    Juste pour savoir, tu as bien Qt version >= 3.1, parce que si c'est Qt 2.3, malheureusement ce ne sera pas possible (en plus, je ne connais pas cette version).
  • oui j'ai la toute derniere version 3.3 :)
    merci de ton aide et de ta patience :)
  • Bon, allons y pour un rapide tuto :
    - tu ouvres Qt Designer
    - tu crées un nouveau widget
    - sur la partie droite, tu créés un nouveau WidgetStack (dans Containers)
    - quand tu cliques avec le bouton de droite sur le widget stack, tu as l'option "Add page". Tu crées autant de page que tu veux. Tu peux te déplacer de page en page avec les flèches (en haut à droite du widgetstack). Tu peux mettre autant de widgets que tu veux (une page ce comporte comme une frame)
    - sur la partie gauche, tu ajoutes un ButtonGroup (dans Containers). Ne t'inquiète pas, tu peux modifier les styles pour qu'il soit invisible plus tard
    - tu vas ensuite insérer dans le ButtonGroup autant de PushButton (dans Buttons) que tu as de pages dans ton widgetStack
    - tu sélectionnes le ButtonGroup, et tu mets la propriétés "exclusive" à true,
    - tu sélectionnes chaque PushButton, et tu mets la propriétés "toggleButton" à true, ainsi que "buttonGroupId" à la valeur de la page correspondante dans ton WidgetStack (attention, ça commence à 0),
    - tu mets la propriété "on" du bouton correspondant à la page courante du widgetStack sur true,

    Voilà, une petite pause. On a juste créé l'interface pour l'instant. On va maintenant associer les différents boutons aux différentes pages :
    - tu cliques sur F3 pour créer une connection
    - tu sélectionnes le buttonGroup, puis le widgetStack,
    - dans la fenêtres qui s'ouvre, pour signal tu choisis "clicked(int)" et pour slot tu choisis "raiseWidget(int)"
    - tu valides le tout

    Et voilà, tu peux tester ton interface en faisant Ctrl+T, en éspérant que c'est ce que tu veux. Je te laisse mettre les layouts et jouer sur les styles, en espérant que tu y arrives.
  • Nikel :) L'interface marche impec :) C'est de la balle merci :). Me reste plus qu'a créer un projet :) et a insérer du code now thx a lot

    Bonne soirée
  • Nikikko, bravo. On a de bon posteurs sur ce forum ;-)
  • arf , je viens de remarquer un truc. Si j'utilise cette méthode je ne peux pas initialiser les calque des widgetStack. Y a pas moyen de fire un truc du genre:

    On cré plusieurs fichiers .ui.h qui contiennent chacun un calque.
    Et on link apres grace au main tous ces calques. car la par exemple dans mon projet j'ai une partie database, une partie network, et une partie opengl.

    Les interfaces sont donc lourdes et si je dois tout regrouper dans un seul fichier ca va devenir tres vite le basard, d'autant plus que je ne vois pas comment initialiser les calques la fonction init_() ne fonctionnant apparament que pour un fichier .ui et non pour un widgetstack



    Je sais qu'il est possible de le faire car j'ai vu un exemple appelé demo, mais le code en est tellement compliqué que j'y comprend pa grand chose lol
  • Tu peux créer un widget pour chacun de tes "calques". Tu peux ainsi contrôler le code très facilement pour chaque widget (constructeur, signaux...).
    Tu auras donc une classe pour chaque "calque" (enfin 2 si on compte les sous-classes...).

    Ensuite, dans Qt designer, tu vas créer des customWidget correspondant aux widgets que tu as fait (utilise bien la classe dérivée, pas celle qui est générée automatiquement). Pour créer un customWidget, c'est relativement simple, il suffit de lui donner un nom, le fichier d'en-têtes, et c'est tout (tu peux même indiquer les signaux et slots. Va voir là :
    http://doc.trolltech.com/3.3/designer-manual-7.html#1-2

    Tu fais ensuite ce que je t'ai dit, et tu insères les différents widgets dans le widgetStack, tu verras c'est super simple.
    Et voilà, le tour est joué.
  • yoptout le monde tout d'abord joyeuses fêtes à tous.
    Je viens vous voir car j'ai toujours des souci avec les widget. J'ai fait ce que tu m'as dis nikikko. J'ai cré un widget principal et un autre widget que je compte insérer comme calque. J'ai créé le custom widget correspondant au claque que je veux insérer.

    Cependant dans le widget principal je n'arrive pas à faire apparaitre le widget secondaire. Je ne vois pas comment insérer le widget secondaire.

    Je vous remercie de votre aide aplus et bonne journée
Connectez-vous ou Inscrivez-vous pour répondre.