Connexion de signaux et d'emplacements surchargés dans Qt 5
Lors de la tentative de connexion de signaux et d'emplacements surchargés dans Qt 5 à l'aide du pointeur vers membre syntaxe de la fonction, les développeurs peuvent rencontrer des erreurs de compilation. Pour résoudre ce problème, il faut comprendre le problème et appliquer la solution appropriée.
Le problème des signaux et des emplacements surchargés
Signaux et emplacements surchargés, tels que QSpinBox : :valueChanged(int) et QSpinBox::valueChanged(QString), peuvent prêter à confusion lors de leur connexion. Le problème survient lorsque vous tentez de vous connecter à un signal sans spécifier explicitement quelle surcharge utiliser.
Solution pour Qt 5.7 et versions ultérieures
À partir de Qt 5.7, Qt fournit une aide fonctions pour sélectionner la surcharge de signal souhaitée. Pour spécifier un signal surchargé, utilisez la fonction qOverload comme suit :
connect(spinBox, qOverload<int>(&QSpinBox::valueChanged), slider, &QSlider::setValue);
Solution pour Qt 5.6 et versions antérieures
Pour les versions antérieures à Qt 5.7, transtypez explicitement le signalez le type correct en utilisant static_cast :
connect(spinBox, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), slider, &QSlider::setValue);
Ugly Solution de contournement
Bien qu'efficace, l'approche static_cast est loin d'être élégante. Envisagez plutôt d'utiliser l'extrait C 11 suivant :
template<typename... Args> struct SELECT { template<typename C, typename R> static constexpr auto OVERLOAD_OF( R (C::*pmf)(Args...) ) -> decltype(pmf) { return pmf; } };
connect(spinBox, SELECT<int>::OVERLOAD_OF(&QSpinBox::valueChanged), ...)
Fonctions d'assistance de Qt 5.7
Qt 5.7 a introduit des fonctions d'assistance pour rationaliser le processus. L'assistant principal est qOverload, avec des options supplémentaires telles que qConstOverload et qNonConstOverload.
Note de documentation
Dans Qt 5.7 et versions ultérieures, la documentation des signaux surchargés fournit explicitement des exemples de comment se connecter à chaque surcharge à l'aide de fonctions d'assistance. Reportez-vous à la documentation pour obtenir des conseils spécifiques.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!