Problème d'utilisation des signaux
Bonjour,
Je n'arrives pas à utiliser les signaux comme je le souhaites.
En fait je cherches à lier ma routine sortie à un menu.
Mon menu est crée via addAction, je passes en paramètres &fenetre ( correspondant à ma fenêtre contenant mon menu ) et en SLOT le nom de ma fonction.
Au démarrage de mon application j'ai un msg dans ma console :
"Object::connect: No such slot QMainWindow::sortie()
Il est clair que le système de signal ne repère pas l'objet
J'ai essayé de remplacer void sortie() par void QmainWindow::sortie(), mais là ça compile pas, cela me paraissait logique par rapport à mon msg d'erreur.
J'ai essayé de mettre this à la place de &fenetre : msg "invalid use of 'this' in non-member function". Je m'attendais pas à ce que ça marche, this servant à indiquer "moi-même" dans un objet, j'ai tenté quand même car addAction est appelé à partir de l'objet menufile, je me suis dit que ça pouvait peut-être être tenté
Les exemples que j'ai trouvé crée un objet contenant tous les éléments de l'application. Il est plus simple pour moi de faire comme je fais, je suis plus habitué à la programmation procédurale qu'à la programmation objet, même si j'ai bien compris le principe, l'appliquer c'est autre chose.
Merci pour votre aide.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
#include <QApplication>
#include <QtGui>
#include <QLabel>
#include <QMainWindow>
#include <QMenu>
#include <QMenuBar>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QMainWindow fenetre;
int largeur_ecran=QApplication::desktop()->width();
int hauteur_ecran = QApplication::desktop()->height();
fenetre.setGeometry(largeur_ecran/4,hauteur_ecran/4,largeur_ecran/2,hauteur_ecran/2);
fenetre.setWindowTitle("Enos");
QMenuBar* menubar=new QMenuBar(&fenetre);
QMenu* menufile=new QMenu("Fichier");
menubar->addMenu(menufile);
// menufile->addAction("&Quitter");
menufile->addAction("&Quitter",&fenetre,SLOT(sortie()));
fenetre.setMenuBar(menubar);
QHBoxLayout* hboxlayout=new QHBoxLayout;
QWidget *zonecentrale=new QWidget;
zonecentrale->setLayout(hboxlayout);
fenetre.setCentralWidget(zonecentrale);
QLabel* label=new QLabel("<center>Essai</center>");
label->setGeometry(10,10,10,10);
hboxlayout->addWidget(label);
fenetre.show();
return app.exec();
}
void sortie()
{
printf("Sortie demandée\n");
} |