Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
1370 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Qt & C++

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Qt & C++

n°2222522
sined40
Posté le 17-03-2014 à 22:35:57  profilanswer
 

Bonjour,
 
J'ai un problème avec C++ & Qt pour créer un widget de type frame dans lequel je voudrais ajouter une QgridLayout qui contient plusieurs labels.
Pour ajouter les labels dans le widget QGridLayout cela a priori cela semble être bon ... enfin j'espère  :wahoo:  
 
Quand j'execute mon code, une fenetre s'ouvre mais aucun widget n'est présent ...
 
Pouvez-vous me dire quel est mon erreur ? Je suppose qu'il s'agit de lier le widget QFrame avec la QGridLayout ...  :??:  
 

Code :
  1. #include <QApplication>
  2. #include <QWidget>
  3. #include <QFrame>
  4. #include <QGridLayout>
  5. #include <QLabel>
  6. class MyWidget : public QWidget
  7. {
  8. public:
  9.     MyWidget(QWidget *parent = 0);
  10. };
  11. MyWidget::MyWidget(QWidget *parent)
  12.     : QWidget(parent)
  13. {
  14.   QFrame       *MyFrame = new QFrame;
  15.   QGridLayout *MyGrid = new QGridLayout;
  16.   QLabel        *MyLbl_01 = new QLabel("Label_01" );
  17.   QLabel        *MyLbl_02 = new QLabel("Label_02" );
  18.   QLabel        *MyLbl_03 = new QLabel("Label_03" );
  19.   // Ajout des labels dans la Grid
  20.   MyGrid->addWidget(MyLbl_01, 0, 0);
  21.   MyGrid->addWidget(MyLbl_02, 1, 0);
  22.   MyGrid->addWidget(MyLbl_03, 2, 0);
  23. }
  24. int main(int argc, char *argv[])
  25. {
  26.     QApplication app(argc, argv);
  27.     MyWidget widget;
  28.     widget.show();
  29.     return app.exec();
  30. }

mood
Publicité
Posté le 17-03-2014 à 22:35:57  profilanswer
 

n°2222529
Farian
Posté le 17-03-2014 à 23:58:26  profilanswer
 

Bonjour !
 
Comme vous l'indiquiez, il manque un "setLayout(MyGrid)" dans le constructeur (ou passer le "this" dans le constructeur du layout).
 
Bonne continuation !

n°2222616
sined40
Posté le 18-03-2014 à 23:59:09  profilanswer
 

Merci, je viens de corriger l'erreur. Par contre, je m'attendais à voir apparaître le qframe mais sans succès (ajout d'une ligne de code pour modifier le contour). En regardant sur Google, j'ai trouvé un exemple de qGroupBox mais l'exemple fourni sur le site de Qt ne donne pas le même aperçu que sur le site. Je suis sous Ubuntu 12.04.4. Est ce normal ?

n°2222629
Farian
Posté le 19-03-2014 à 09:03:17  profilanswer
 

Bonjour !
 
Votre QFrame n'est reliée à aucun autre objet, si on suit le déroulement :  
 
 * Vous créez le QWidget
 * Vous créez la QFrame,
 * Vous créez le Layout et l'ajoutez au QWidget,
 * Vous créez les 3 QLabels,
 * Vous ajoutez les 3 QLabels au Layout
 
La QFrame doit être ajoutée à un moment ou à un autre dans l'arborescence des objets graphiques.
 
Question : Vous n'utilisez pas le designer afin de mieux contrôler ce qui est fait ? Car c'est rare de faire ses IHM "à la main".
 
Bonne continuation !

n°2222674
sined40
Posté le 19-03-2014 à 23:35:06  profilanswer
 

Merci pour la réponse mais comment ajouter le qframe au qwidget puis mettre dans le qframe le qgrid.
 
Pour qtdesigner, je connais mais en lisant le tutoriel intro qt de développez.com: on conseille d'abord de faire le code à la main puis après de faire du qtdesigner.

n°2222692
Farian
Posté le 20-03-2014 à 11:09:01  profilanswer
 

Bonjour !
 
Si vous faites comme vous indiquez, vous aurez un problème de taille / agrandissement, car vous aurez une QFrame sans aucune indication de taille dans un QWidget (la fenêtre) qui n'a pas de layout.
 
(Je ne suis pas certain d'avoir été clair dans cette explication ...)
 
Sinon, pour le faire :  
 
rajoutez "this" comme paramètre dans le constructeur de la frame et, puis "frame->setLayout(grid)".
 
Bonne continuation !

n°2222709
Terminapor
I'll see you rise.
Posté le 20-03-2014 à 13:07:10  profilanswer
 

Comme dit plus haut, ton widget "MyWidget" n'a aucun layout, le QGridLayout que tu créé se retrouve perdu dans le néant ( faut faire appel à SetLayout(grid) ou this->setLayout(grid), ou frame->setLayout(grid), dépendant de ce que tu cherches) .
Idem pour le QFrame, tu ne précises pas qui va l'avoir, perdu aussi :spamafote:
 
Maintenant, si tu veux faire un widget de type frame (en gros, MyWidget est un QFrame), dans ce cas faut modifier l'héritage :  
 

Code :
  1. class MyWidget : public QFrame
  2. {
  3.    explicit MyWidget( QWidget* Parent = NULL ) : QFrame( Parent )
  4.    { ... }
  5. };


 
Et dans le constructeur, tu créé ton layout + ajoute les labels.
Là ce que tu cherches à faire (admettant que ton code est bon), c'est une fenêtre dans laquelle tu as un QFrame dans lequel tu vas avoir ton grid layout avec les labels.


---------------
Perhaps you don't deserve to breathe

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Qt & C++

 

Sujets relatifs
[C++] manipulation de tableau a l'aide des references ?Visual C++ 2010 Express et SDL
C# Problème de clé absente du dictionnaire[HELP] Visual C++
[C++] utiliser des classes dans mon codeComment transformer un projet C++ .exe en .DLL pour exporter des fonct
Les variables bases en C++User Group C++ Francophone - Soirée Qt Mobile - 5 Juin 2013
[Visual C++ / Qt / OpenGL] LNK2001 : unresolved external symbol[C++] Différences de déclarations dans des classes Qt
Plus de sujets relatifs à : Qt & C++


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR