IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Qt Discussion :

Erreur de connexion intéressante


Sujet :

Qt

  1. #1
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 713
    Points : 2 361
    Points
    2 361
    Par défaut Erreur de connexion intéressante
    Bonjour.

    J'ai eu une erreur assez intéressante avec ce code :
    Code Qt : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    class Settings
    {
        public:
            enum HomeLayout { H_Grid, H_List }; //une énumération simple
        public slots:
            void setHomeLayout(HomeLayout);
    }
     
    //connect 1 : ok
    connect(combobox, SIGNAL(currentIndexChanged(int)), &settings, SLOT(setHomeLayout(HomeLayout)));
     
    //connect 2 : problème à cause de l'enum
    connect(combobox,
        static_cast<void (QComboBox::*)(int)>( &QComboBox::currentIndexChanged ),
        &settings, &Settings::setHomeLayout
    );

    Ce code sert à définir l'affichage d'un écran d'accueil (liste ou grille).

    Quand je passe par la « vielle » syntaxe de connexion avec les macros, ça compile et ça fonctionne.
    Quand j'essaie la syntaxe avec l’adresse des méthode, ça ne compile plus :
    qglobal.h:684: erreur : static assertion failed: Signal and slot arguments are not compatible.
    Visiblement QMetaObject n'aime pas convertir les entiers en enum

    Quelqu'un de calé en Qt sais si il est possible de forcer un cast implicite ou bien aurait une autre solution ?

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Citation Envoyé par manudiclemente
    Visiblement QMetaObject n'aime pas convertir les entiers en enum
    Et à raison. La conversion enum => int ne pose pas de soucis, mais l'inverse n'est pas vrai.

    Pour t'en sortir, tu peux utiliser une lambda :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    connect(combobox,
        static_cast<void (QComboBox::*)(int)>( &QComboBox::currentIndexChanged ),
        [&settings](int index) { settings->setHomeLayout( static_cast<HomeLayout>(index) ); }
    );
    Ou faire un slot (surcharge ou non) qui prend un int en paramètre.

  3. #3
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    713
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 713
    Points : 2 361
    Points
    2 361
    Par défaut
    J'ai pensé aux lambdas, mais ça complique les connect un peu trop à mon goût .
    Je vais changer les enums en int dans les slots, ça m'évitera de faire des casts dans les connexions et de les simplifier.
    Mais c''est dommage quand même, ça serait plus simple si une conversion implicite aurait pu avoir lieu, vu que j'ai plusieurs enums de cet acabit.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur de connexion en mode ssh
    Par okoax dans le forum Réseau
    Réponses: 3
    Dernier message: 23/02/2005, 13h36
  2. Erreur de connexion au serveur SQL 3
    Par NeHuS dans le forum Langage SQL
    Réponses: 3
    Dernier message: 28/01/2005, 13h55
  3. Erreur de connexion à ma base sur serveur Debian - Apache
    Par GLDavid dans le forum Installation
    Réponses: 4
    Dernier message: 24/09/2003, 10h29
  4. Pgsql : erreur de connexion 'too many clients ...'
    Par petitmoosse dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 21/08/2003, 14h03
  5. Erreur de connexion à PostGresql via pgAdminII
    Par LS dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 21/08/2003, 09h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo