Je débute avec Qt. Je ne sais pas si c'est comme cela que l'on pose une question sur la forum. Je voudrais créer une fenêtre avec à l'intérieur un bouton de type Bouton et non avec QPushbutton. Avec le code suivant, ça plante. Merci d'avance
Non, dans la directive include, l'espace n'est pas nécessaire, tu peux le mettre ou pas, c'est purement à ta convenance. Certains programmeurs en mettent, d'autres pas (moi, par exemple, je n'en met pas et cela ne m'a jamais posé le moindre problème), c'est une convention purement esthétique.
Pour poster du code utilise le bouton </> de l'éditeur de message, puis dans la fenêtre choisis le langage que tu veux afficher, ça donne quelque chose de plus lisible
Quelques remarques
La gestion de la mémoire avec Qt est un peu spéciale, les objets dérivés de QObject (et donc tout ceux dérivés de QWidget, puisque QWidget dérive de QObject) sont pris en charge par le système parent/enfant de Qt. Le constructeur d'une classe qui dérive de QObject ou QWidget devrait posséder un paramètre de type QObject * ou QWidget * servant à passer le parent, afin de rentrer dans le système parent/enfant de Qt.
class Fenetre : public QWidget
{
Q_OBJECT
public:
Fenetre(int h,int w,QWidget * owner = nullptr);
virtual ~Fenetre() = default; /* on dérive de QWidget,
donc destructeur virtuel obligatoire!
Comme le système parent/enfant de Qt
va prendre en charge m_bouton, le destructeur
généré par le compilateur sera parfait.
*/
// ...
};
Fenetre::Fenetre(int h,int w,QWidget * owner)
:QWidget{owner}
,m_longueur{h}
,m_largeur{w}
,m_bouton{new Bouton{"test",this}}
{
///...
}
Petite remarque, QPushButton dérive de QWidget, donc ceci est valable pour toute classe dérivée de QPushButton...
Bonjour, j'ai donc testé avec cette modif, mais j'ai toujours le message d'erreur 'Bouton' does not name a type à l'instruction Bouton *m_bouton; du fenetre.h
Tu as un include circulaire. Bouton.h inclus Fenetre.h et Fenetre.h inclus Bouton.h. Que Fenetre.h incluse Bouton.h c'est normal, le compilateur a besoin de connaître Bouton pour comprendre Fenetre (encore que comme on ne déclare qu'un pointeur sur Bouton, une déclaration forward pourrait suffire, on déporterait alors l'include dans le cpp), par contre, l'include de Fenetre.h dans Bouton.h ne sert strictement à rien vu qu'a aucun moment dans Bouton.h tu ne mentionnes ta classe Fenetre, et au passage c'est lui qui fout la merde en provoquant l'inclusion circulaire.
J'ai indiqué comment poster proprement du code, en pure perte...
J'ai résumé l'utilisation du système parent/enfant de Qt comme si j'avais dû l'expliquer à mon chat. Lui, il a rien compris, il n'est pas très malin (même pour un chat), mais son truc c'est de dézinguer ma souris, pas de faire des classes Qt, donc c'est pas trop grave ^^
Pour résumé, je t'ai mis devant l'abreuvoir, mais bon, faire boire un âne qui ne veut pas boire, comme disait mon grand père...
Merci de votre aide, maintenant grâce à l'utilisation du système parent/enfant de QT comme vous me l'avez expliqué, cela fonctionne très bien.
Excellente pédagogie.
RL
Problème avec classe QPushbutton
× 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.
« Je n’ai pas besoin de preuve. Les lois de la nature, contrairement aux lois de la grammaire, ne permettent aucune exception. »
D. Mendeleïev