Problème Qt passant des arguments à l'emplacement
Je ne peux pas me passer d'un argument à un logement. Si je ne passe pas un argument, la fonction rouleaux par de fines. Si je passe un argument (de type entier), j'obtiens les erreurs "un tel nom de type" et "logement" quand je compile.
Dans ma tête, je déclare:
private slots:
void addButton(int);
signals:
void clicked(int)
dans mon Main.cpp je n':
int count;
int count = 0;
QPushButton* button = new QPushButton("Button");
_layout->addWidget(button);
connect(button, SIGNAL(clicked(count), this, SLOT(addButton(count)));
....
void Main::addButton(int count) {
//do stuff with count
}
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Sebastian est correct que vous ne pouvez pas faire cela dans la façon dont vous essayez, cependant, Qt fournit une classe qui vous donne les fonctionnalités que vous souhaitez.
Découvrez la QSignalMapper. Il vous permet d'associer un entier avec un objet/signal de la paire. Vous puis connectez-vous à ses signaux au lieu de directement sur le bouton.
Le signal et le slot doivent avoir le même nombre et type(s) argument(s), et vous ne pouvez passer l'argument(s) du signal pour le logement, pas de n'importe quelle variable ou la valeur que vous souhaitez.
Je vois trois problèmes avec cette.
Tout d'abord, la
clicked()
signal est émis parQPushButton
(sans paramètres), mais vous êtes en train de redéfinir dans votre propre classe (avec unint
paramètre). Si vous voulez faire ceci:alors vous ne pouvez connecter les signaux sont déjà définies dans la
SignalClass
. En d'autres termes, le signala()
doit appartenir àSignalClass
pasSlotClass
.(En fait,
clicked()
est défini dansQPushButton
's de la classe de baseQAbstractButton
.)Deuxièmement, à l'intérieur de la
connect()
fonction, vous devez spécifier le signal et le slot signatures avec leurs paramètres types. Lorsque vous avezcount
à l'intérieur de laconnect()
fonction, il convient deint
.Et troisièmement, il y a un support manquant dans votre appel pour vous connecter:
SIGNAL(clicked(count))
.Espère que ça aide.