Maison > développement back-end > C++ > Comment connecter des signaux et des emplacements surchargés dans Qt 5 ?

Comment connecter des signaux et des emplacements surchargés dans Qt 5 ?

Linda Hamilton
Libérer: 2024-12-12 15:16:11
original
535 Les gens l'ont consulté

How to Connect Overloaded Signals and Slots in Qt 5?

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);
Copier après la connexion

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);
Copier après la connexion

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;
    }
};
Copier après la connexion
connect(spinBox, SELECT<int>::OVERLOAD_OF(&QSpinBox::valueChanged), ...)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal