Partage
  • Partager sur Facebook
  • Partager sur Twitter

[QT4] FormLayout et QLabel

Sujet résolu
    26 mai 2008 à 0:33:01

    Bonsoir,

    Je voudrais dans mon programme afficher un QLabel qui servira de titre, et dessous un QFormLayout.

    D'abord voici le code de la classe qui s'en sert :

    classes/CFenetrePrincipal.h:
    /*Copyright DE LOS RIOS Christophe, 2008
    
    DE LOS RIOS christophe : christophedlr@gmail.com
    
    Ce logiciel est un programme informatique servant à rapporter des bogues via un SGBD.
    
    Ce logiciel est régi par la licence CeCILL soumise au droit français et
    respectant les principes de diffusion des logiciels libres. Vous pouvez
    utiliser, modifier et/ou redistribuer ce programme sous les conditions
    de la licence [CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA 
    sur le site "http://www.cecill.info".
    
    En contrepartie de l'accessibilité au code source et des droits de copie,
    de modification et de redistribution accordés par cette licence, il n'est
    offert aux utilisateurs qu'une garantie limitée.  Pour les mêmes raisons,
    seule une responsabilité restreinte pèse sur l'auteur du programme,  le
    titulaire des droits patrimoniaux et les concédants successifs.
    
    A cet égard  l'attention de l'utilisateur est attirée sur les risques
    associés au chargement,  à l'utilisation,  à la modification et/ou au
    développement et à la reproduction du logiciel par l'utilisateur étant 
    donné sa spécificité de logiciel libre, qui peut le rendre complexe à 
    manipuler et qui le réserve donc à des développeurs et des professionnels
    avertis possédant  des  connaissances  informatiques approfondies.  Les
    utilisateurs sont donc invités à charger  et  tester  l'adéquation  du
    logiciel à leurs besoins dans des conditions permettant d'assurer la
    sécurité de leurs systèmes et ou de leurs données et, plus généralement, 
    à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. 
    
    Le fait que vous puissiez accéder à cet en-tête signifie que vous avez 
    pris connaissance de la licence CeCILL, et que vous en avez accepté les
    termes.*/
    #ifndef H_MAIN_CPP
    #define H_MAIN_CPP
    
    #include <QAction>
    #include <QApplication>
    #include <QMenuBar>
    #include <QMenu>
    #include <QMenuItem>
    #include <QLabel>
    #include <QLineEdit>
    #include <QFormLayout>
    #include <QVBoxLayout>
    
    using namespace std;
    
    class CFenetrePrincipal
    {
    	private:
    	QWidget fenetre;
    	QMenuBar *menu;
    	QMenu *fichier, *aide;
    	QLabel *titre;
    	QFormLayout *formulaire;
    	QVBoxLayout *principal;
    	QLineEdit *titreBogue;
    	
    	public:
    	CFenetrePrincipal(char *titre);
    	~CFenetrePrincipal();
    	void menuFichier();
    	void menuAide();
    	void rapport();
    };
    
    #endif
    


    classes/CFenetrePrincipal.cpp :
    /*Copyright DE LOS RIOS Christophe, 2008
    
    DE LOS RIOS christophe : christophedlr@gmail.com
    
    Ce logiciel est un programme informatique servant à rapporter des bogues via un SGBD.
    
    Ce logiciel est régi par la licence CeCILL soumise au droit français et
    respectant les principes de diffusion des logiciels libres. Vous pouvez
    utiliser, modifier et/ou redistribuer ce programme sous les conditions
    de la licence [CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA 
    sur le site "http://www.cecill.info".
    
    En contrepartie de l'accessibilité au code source et des droits de copie,
    de modification et de redistribution accordés par cette licence, il n'est
    offert aux utilisateurs qu'une garantie limitée.  Pour les mêmes raisons,
    seule une responsabilité restreinte pèse sur l'auteur du programme,  le
    titulaire des droits patrimoniaux et les concédants successifs.
    
    A cet égard  l'attention de l'utilisateur est attirée sur les risques
    associés au chargement,  à l'utilisation,  à la modification et/ou au
    développement et à la reproduction du logiciel par l'utilisateur étant 
    donné sa spécificité de logiciel libre, qui peut le rendre complexe à 
    manipuler et qui le réserve donc à des développeurs et des professionnels
    avertis possédant  des  connaissances  informatiques approfondies.  Les
    utilisateurs sont donc invités à charger  et  tester  l'adéquation  du
    logiciel à leurs besoins dans des conditions permettant d'assurer la
    sécurité de leurs systèmes et ou de leurs données et, plus généralement, 
    à l'utiliser et l'exploiter dans les mêmes conditions de sécurité. 
    
    Le fait que vous puissiez accéder à cet en-tête signifie que vous avez 
    pris connaissance de la licence CeCILL, et que vous en avez accepté les
    termes.*/
    #include "CFenetrePrincipal.h"
    
    CFenetrePrincipal::CFenetrePrincipal(char *titreFenetre)
    {
    	fenetre.setFixedSize(800, 600);
    	fenetre.setWindowTitle(titreFenetre);
    	
    	menu = new QMenuBar(&fenetre);
    	titre = new QLabel(&fenetre);
    	
    	formulaire = new QFormLayout;
    	titreBogue = new QLineEdit;
    	
    	principal = new QVBoxLayout;
    }
    
    void CFenetrePrincipal::menuFichier()
    {
    	fichier = menu->addMenu("Fichier");
    	
    	fichier->addAction("Nouveau"); //Nouveau rapport de bogue
    	fichier->addAction("Ouvrir"); //Ouvre un rapport de bogue
    	
    	fichier->addAction("Enregistrer"); //Enregistrer le bogue
    	fichier->addSeparator(); //Ajoute un séparateur
    	
    	fichier->addAction("Importer"); //Importer un fichier SQL de bogue
    	fichier->addAction("Exporter"); //Exporter les bogues
    	
    	fichier->addSeparator();
    	
    	QAction *quitter = fichier->addAction("Quitter"); //Quitter le programme
    	quitter->setShortcut(QKeySequence("Ctrl+W")); //Ajoute un raccourcis clavier
    	QObject::connect(quitter, SIGNAL(triggered()), qApp, SLOT(quit())); //Ajoute un signale
    }
    
    void CFenetrePrincipal::menuAide()
    {
    	aide = menu->addMenu("Aide");
    	
    	aide->addAction("Rubrique d'aide"); //Aide du logiciel
    	aide->addAction("Mise à jour"); //MAJ
    	
    	aide->addSeparator();
    	aide->addAction("A propos"); //Fenêtre A propos de
    }
    
    void CFenetrePrincipal::rapport()
    {
    	titre->setText("<h1>Rapporter un bogue</h1>");
    	titre->move(250, 20);
    	
    	formulaire->addRow("Titre :", titreBogue);
    	
    	principal->addLayout(titre);
    	principal->addLayout(formulaire);
    	
    	fenetre.setLayout(principal);
    	fenetre.show();
    }
    
    CFenetrePrincipal::~CFenetrePrincipal()
    {
    	delete menu;
    	delete titre;
    	
    	delete formulaire;
    	delete titreBogue;
    	
    	delete principal;
    }
    


    Et voici l'erreur :
    classes/CFenetrePrincipal.cpp: In member function «void CFenetrePrincipal::rapport()»:
    classes/CFenetrePrincipal.cpp:87: erreur: no matching function for call to «QVBoxLayout::addLayout(QLabel*&)»
    /usr/include/qt4/QtGui/qboxlayout.h:88: note: candidats sont: void QBoxLayout::addLayout(QLayout*, int)
    make: *** [CFenetrePrincipal.o] Erreur 1


    J'ai regardé dans le cours de M@teo21, il utilise comme moi.
    Pour ce qui est de la doc, d'après elle la méthode addLayout éxiste pas.

    Merci d'avance à ceux qui pourront m'aider.
    • Partager sur Facebook
    • Partager sur Twitter
    Mon site internet : http://www.chrissoftware.fr.nf
    Anonyme
      26 mai 2008 à 0:37:34

      Salut

      addLayout attends un QLayout, tu lui envoies un QLabel (ligne 87) (l'erreur te dit qu'il n'y a pas de méthode addLayout(QLabel *), pas qu'il n'y a pas de méthode addLayout(QLayout *).
      C'est de la méthode addWidget() dont tu as besoin.
      • Partager sur Facebook
      • Partager sur Twitter
        26 mai 2008 à 0:43:08

        Je suis d'accord avec toi, mais dans le tuto de @teo21 : http://www.siteduzero.com/tuto-3-31041 [...] tml#ss_part_6
        Il fait la même chose mais avec un QPushButton à la place du QLabel, d'où le fait que je comprend pas que ça fonctionne avec lui et pas avec moi.

        Sinon, tu crois que en formant un Layout autour de mon QLabel ça fonctionnerais ?
        • Partager sur Facebook
        • Partager sur Twitter
        Mon site internet : http://www.chrissoftware.fr.nf
        Anonyme
          26 mai 2008 à 0:46:00

          Dans son tuto, il utilise addLayout() pour ajouter des layout et addWidget() pour ajouter des widget, ce qu'est QLabel.

          Pourquoi ajouter un Layout s'il n'y a qu'un widget dedans ? Utilises plutôt addWidget() pour ajouter le widget à ton layout principal.
          • Partager sur Facebook
          • Partager sur Twitter
            26 mai 2008 à 1:01:37

            Ah c'est pas stupide ça lol, j'y avais pas pensé(pas de cerveau ce soir finalement ;) ).

            Je vais voir demain avec un addWidget, et je te dirais.

            EDIT: Ca fonctionne, merci à toi.
            • Partager sur Facebook
            • Partager sur Twitter
            Mon site internet : http://www.chrissoftware.fr.nf

            [QT4] FormLayout et QLabel

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown