Non le réel intérêt, c'est que les évènements ont bien plus de "sens". On peut par exemple connecter le signal "currentFontChanged" d'un widget de sélection de font à la méthode (qui est aussi un slot) "setFont" d'un widget d'édition de texte.
De plus, le fait de pouvoir utiliser n'importe quelle méthode et ne pas être forcé par le nom évite de devoir faire comme en Java (de mémoire) au choix :
public void actionPerformed(Event ev) { // un bouton cliqué
if (ev.getSource() == monBouton1) {
// faire un truc
} else if (ev.getSource() == monBouton2) {
// etc
}
}
ou
monBouton1.addActionListener(new ActionListener() {
public void actionPerformed(Event ev) {
// faire un truc
}
});
monBouton2.addActionListener(new ActionListener() {
public void actionPerformed(Event ev) {
// etc
}
});
Mais faire (de mémoire)
connect(monBouton1, SIGNAL("clicked()"), monObjet, SLOT("bouton1clique"));
connect(monBouton2, SIGNAL("clicked()"), monObjet, SLOT("bouton2clique"));
[^] # Re: signals/slots?
Posté par Octabrain . En réponse à la dépêche Qt Software ouvre Qt à la communauté et publie Qt Jambi 4.5. Évalué à 2.
De plus, le fait de pouvoir utiliser n'importe quelle méthode et ne pas être forcé par le nom évite de devoir faire comme en Java (de mémoire) au choix :
public void actionPerformed(Event ev) { // un bouton cliqué
if (ev.getSource() == monBouton1) {
// faire un truc
} else if (ev.getSource() == monBouton2) {
// etc
}
}
ou
monBouton1.addActionListener(new ActionListener() {
public void actionPerformed(Event ev) {
// faire un truc
}
});
monBouton2.addActionListener(new ActionListener() {
public void actionPerformed(Event ev) {
// etc
}
});
Mais faire (de mémoire)
connect(monBouton1, SIGNAL("clicked()"), monObjet, SLOT("bouton1clique"));
connect(monBouton2, SIGNAL("clicked()"), monObjet, SLOT("bouton2clique"));
Et avoir une méthode séparée pour chaque.