Qt Signaux et les slots - No matching function for call
Je suis à l'apprentissage de QT et essaie d'obtenir mon signaux et les slots de travail. Je vais avoir pas de chance.
Voici ma Principale
int main(int argc, char** argv) {
QApplication app(argc, argv);
FilmInput fi;
FilmWriter fw;
QObject::connect (&fi->okButton, SIGNAL( clicked() ), &fi, SLOT( okButtonClicked() )
); //Error received Base operand of '->' has non-pointer type 'FilmInput'
QObject::connect(&fi,SIGNAL(obtainFilmData(QVariant*)),&fw,SLOT(saveFilmData(QVariant*)));
//Error received No matching function for call to 'QObject::connect(Filminput*, const char*, FilmWriter*, const char*)
fi.show();
return app.exec();
}
et voici ma triste tentative de signaux et de slots:
FilmInput.h
public:
FilmInput();
void okButtonClicked();
QPushButton* okButton;
signals:
void obtainFilmData(Film *film);
Here is FilmWriter.h
public slots:
int saveFilm(Film &f);
Here is Film Input.cpp
void FilmInput::okButtonClicked(){
Film *aFilm=new Film();
aFilm->setDirector(this->edtDirector->text());
emit obtainFilmData(aFilm);
}
Est ici FilmWriter.cpp
void FilmInput::okButtonClicked(){
Film *aFilm=new Film();
aFilm->setDirector(this->edtDirector->text());
emit obtainFilmData(aFilm);
}
Merci de m'aider à passer les signaux et les slots de travail, j'ai passé des heures mais je ne suis pas plus près d'obtenir ce travail. J'ai ajouté les erreurs reçues dans mes commentaires ci-dessus.
Ce qui concerne
OriginalL'auteur user2691192 | 2013-08-17
Vous devez vous connecter pour publier un commentaire.
nommés okbutton est déjà un pointeur, alors vous devez supprimer l'esperluette:
(en fait, assurez-vous de créer le bouton dans FilmInput constructeur...)
Prochaine, vos méthodes de signature ne correspond pas à ce que vous dites dans connect: compte tenu de vos fonctions, doit être
cela va fonctionner, parce que vous êtes en échange d'un pointeur, puis Qt peut en faire une copie. Sinon, votre type doit être enregistré.
Salut, je ne pouvais pas entrer plus dans le commentaire ci-dessus, mais tiens à dire que j'ai essayé votre solution et il n'a pas changé le message d'erreur. Merci
vous devez dériver à la fois FilmInput et FilmWriter de QObject, et ajouter la macro q_object dans les en-têtes. Puis faire un tout reconstruire...
OriginalL'auteur CapelliC
La première erreur est causée par
&fi->okButton
parce que->
a une priorité plus élevée que&
. Voir La Priorité De L'Opérateur. Facilement résolu avec(&fi)->okButton
.La deuxième erreur est probablement causée par un ou deux objets qui ne sont pas hériter de
QObject
. Les signaux et les slots ne peut travailler qu'entreQObjects
. Juste une courte liste:QObject
classeQ_OBJECT
macro doit être utilisé dans la définition de chaque classeAussi, si vous êtes en utilisant Qt version 5.0 ou plus, vous devriez commencer à passer des pointeurs de fonction pour le connecter méthodes au lieu d'utiliser le
SIGNAL
etSLOT
macros. Il va fournir au moment de la compilation de la vérification des connexions.Les signaux et les slots (et beaucoup d'autres Qt convenances) ne fonctionnera pas sans les méta-informations sur les objets de ces classes compilées dans le projet. Si vous êtes à l'aide de Qt Creator que tout est fait pour vous, mais dans la plupart des autres environnements que vous avez à générer vous-même. Veuillez suivre les instructions sur cette page si vous ne l'avez pas déjà.
OriginalL'auteur Seth Anderson