QComboBox connecter
J'ai besoin d'appeler une fonction avec currentIndex+1 lors de la currentIndex d'un QComboBox changements. J'ai du mal avec la syntaxe de ce matin:
//call function readTables(int) when currentIndex changes.
connect(ui->deviceBox, SIGNAL(currentIndexChanged()),
SLOT( readTables( ui->deviceBox->currentIndex()+1) );
erreur: attendu")'
FENTE( readTables(ui->deviceBox->currentIndex()+1) );
L'ajout d'une clôture ) ne fonctionne pas...!
- L'écrire comme
connect(ui->deviceBox, SIGNAL(currentIndexChanged(int)), SLOT(readTables(int));
. LereadTables(int)
fente va être appelé avec l'index actuel comme un argument. - Si vous allez utiliser Qt version 5+ et c++11, alors vous pouvez écrire
connect(ui->deviceBox, SIGNAL(currentIndexChanged(int)), [this]( int idx ) { readTables( idx + 1 ); } );
- Je vous recommande de lire le
Qt Signals and Slots
de la documentation: qt-project.org/doc/qt-4.8/signalsandslots.html
Vous devez vous connecter pour publier un commentaire.
Première. Si vous pouvez modifier la fonction
readTables
, alors vous pouvez simplement écrire:et dans
readTables
Deuxième: Si vous pouvez utiliser Qt 5+ et c++11, il suffit d'écrire:
Troisième: Si vous ne pouvez pas modifier
readTables
et ne peut pas utiliser le c++11, écrire votre propre logement (direreadTables_increment
) comme ceci:et connecter un signal à elle:
QComboBox::currentIndexChanged
attend un QString ou un int que le seul argument. Vous avez 2 erreurs ici:currentIndexChanged()
qui n'existe pasSLOT
que la fente argument qui exige la fente de signature; plutôt, vous essayez de passer un argument "à la volée", ce qui n'est pas quelque chose de permis.@borisbn suggestion est assez bon si vous êtes ok avec l'aide de C++ lambdas.
Sinon, vous devrez déclarer une nouvelle machine à sous avec un
int
argument: