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 :

QObject::connect: No such slot


Sujet :

Qt

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 21
    Points : 8
    Points
    8
    Par défaut QObject::connect: No such slot
    Bonjour, j'ai un probleme etrange que je n'arrive pas a resoudre depuis maintenant trop longtemps...
    J'ai créé une classe COnglet qui me permet de creer un onglet avec un titre, et dedans une listbox associée, que je peut remplir grace a une methode...
    Je cherche maintenant à relier le signal de la listbox (selected() pour etre precis) à un slot de ma classe et ainsi récuperer la sélection de l'utilisateur (ouf !)

    voici ma classe

    Code : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    class COnglet : public QObject
    {
        Q_OBJECT
     
    protected:
        QString m_titre;
        uint m_nbelements;
        QString *m_listeelements;		//contient les elements et leur lien vers le hdd
        QString *m_listeliens;
        QWidget *pTab;
        QListBox *ListBox;
        QSize geometry;
        QTabWidget *m_TabPere;
     
    public:
        ~COnglet()
        {
    	delete pTab;
    	delete m_listeelements;
    	delete m_listeliens;
    	delete ListBox;
        }
        void setTitre(QString titre)
        {
    	m_titre=titre;
        }
        uint getTitre()
        {
    	return (m_nbelements);
        }
        void setNbElements(int nbelements)
        {
    	m_nbelements=nbelements;
        }
        uint getNbElements()
        {
    	return m_nbelements;
        }
        void SetListeElements(uint index, QString titre, QString lien);
        void CreationOnglet( QTabWidget *pPere,QString titre, int nbelements);
     
    signals:
        void EmitPlay();
     
    private slots:
        void Play(int index);
    };
    Ensuite, dans la fonction CreationOnglet (ce n'est pas le constructeur pour des raisons de facilite) :

    Code : 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
    17
    18
    void COnglet::CreationOnglet( QTabWidget *pPere,QString titre, int nbelements)
    {
    //creation de l'onglet
        m_TabPere = pPere;
        pTab = new QWidget(pPere);
        pPere->addTab(pTab,titre);
        pPere->showPage(pTab);
        m_titre=titre;
        m_nbelements=nbelements;
        geometry = (*pPere).frameSize();
     
        //creation de la listbox
        m_listeelements = new QString[m_nbelements];
        m_listeliens = new QString[m_nbelements];
        ListBox = new QListBox(pTab, m_titre);
        (*ListBox).setFixedSize( geometry.width()-1, geometry.height()-27);	//catch de la taille de l'onglet
        connect(ListBox,SIGNAL(selected ( int  )),this,SLOT(Play(int )));
    }
    Tout compile bien, je n'ai pas oublie dans ma classe la declaration Q_OBJECT et elle herite bien de la classe QObject mais a l'execution j'ai un splendide :

    QObject::connect: No such slot QObject::void Play(int)
    QObject::connect: (sender name: 'Bidule')
    QObject::connect: (receiver name: 'unnamed')

    Je précise que Bidule est le nom de l'onglet (bon c'est du test hein)
    Je ne comprend pas tres bien que faire, j'ai pourtant bien refait x fois un qmake fubar.pro ou qmake -o Makefile fubar.pro mais non... fichu moc !!!
    Je ne voit pas bien pourquoi il va chercher dans QObject

    Ah, je précise que j'ai lu ce topic (mais j'avais tout bien fait) :
    http://www.developpez.net/forums/vie...&view=previous
    Sincerily

  2. #2
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 750
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 750
    Points : 10 667
    Points
    10 667
    Billets dans le blog
    3
    Par défaut
    Pourtant ça a l'air correct. Tu as bien un fichier moc généré ?
    Tu utilises quelle version de QT ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 21
    Points : 8
    Points
    8
    Par défaut
    Dans le dossier .moc, j'ai bien un fichier moc_GestionOnglets.cpp qui correspond au nom du fichier ou j'ai mis ma classe...

    Je peut le poster si tu veut, ca peut aider???

    Code : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    #undef QT_NO_COMPAT
    #include "../GestionOnglets.h"
    #include <qmetaobject.h>
    #include <qapplication.h>
     
    #include <private/qucomextra_p.h>
    #if !defined(Q_MOC_OUTPUT_REVISION) || (Q_MOC_OUTPUT_REVISION != 26)
    #error "This file was generated using the moc from 3.3.4. It"
    #error "cannot be used with the include files from this version of Qt."
    #error "(The moc has changed too much.)"
    #endif
     
    const char *COnglet::className() const
    {
        return "COnglet";
    }
     
    QMetaObject *COnglet::metaObj = 0;
    static QMetaObjectCleanUp cleanUp_COnglet( "COnglet", &COnglet::staticMetaObject );
     
    #ifndef QT_NO_TRANSLATION
    QString COnglet::tr( const char *s, const char *c )
    {
        if ( qApp )
    	return qApp->translate( "COnglet", s, c, QApplication::DefaultCodec );
        else
    	return QString::fromLatin1( s );
    }
    #ifndef QT_NO_TRANSLATION_UTF8
    QString COnglet::trUtf8( const char *s, const char *c )
    {
        if ( qApp )
    	return qApp->translate( "COnglet", s, c, QApplication::UnicodeUTF8 );
        else
    	return QString::fromUtf8( s );
    }
    #endif // QT_NO_TRANSLATION_UTF8
     
    #endif // QT_NO_TRANSLATION
     
    QMetaObject* COnglet::staticMetaObject()
    {
        if ( metaObj )
    	return metaObj;
        QMetaObject* parentObject = QObject::staticMetaObject();
        static const QUParameter param_slot_0[] = {
    	{ "index", &static_QUType_int, 0, QUParameter::In }
        };
        static const QUMethod slot_0 = {"Play", 1, param_slot_0 };
        static const QMetaData slot_tbl[] = {
    	{ "Play(int)", &slot_0, QMetaData::Private }
        };
        static const QUMethod signal_0 = {"EmitPlay", 0, 0 };
        static const QMetaData signal_tbl[] = {
    	{ "EmitPlay()", &signal_0, QMetaData::Public }
        };
        metaObj = QMetaObject::new_metaobject(
    	"COnglet", parentObject,
    	slot_tbl, 1,
    	signal_tbl, 1,
    #ifndef QT_NO_PROPERTIES
    	0, 0,
    	0, 0,
    #endif // QT_NO_PROPERTIES
    	0, 0 );
        cleanUp_COnglet.setMetaObject( metaObj );
        return metaObj;
    }
     
    void* COnglet::qt_cast( const char* clname )
    {
        if ( !qstrcmp( clname, "COnglet" ) )
    	return this;
        return QObject::qt_cast( clname );
    }
     
    // SIGNAL EmitPlay
    void COnglet::EmitPlay()
    {
        activate_signal( staticMetaObject()->signalOffset() + 0 );
    }
     
    bool COnglet::qt_invoke( int _id, QUObject* _o )
    {
        switch ( _id - staticMetaObject()->slotOffset() ) {
        case 0: Play((int)static_QUType_int.get(_o+1)); break;
        default:
    	return QObject::qt_invoke( _id, _o );
        }
        return TRUE;
    }
     
    bool COnglet::qt_emit( int _id, QUObject* _o )
    {
        switch ( _id - staticMetaObject()->signalOffset() ) {
        case 0: EmitPlay(); break;
        default:
    	return QObject::qt_emit(_id,_o);
        }
        return TRUE;
    }
    #ifndef QT_NO_PROPERTIES
     
    bool COnglet::qt_property( int id, int f, QVariant* v)
    {
        return QObject::qt_property( id, f, v);
    }
     
    bool COnglet::qt_static_property( QObject* , int , int , QVariant* ){ return FALSE; }
    #endif // QT_NO_PROPERTIES
    [edit]
    J'utilise la version 3.** (je sais plus derriere, et je suis sous windows la) et j'ai deja utilise ce genre de chose (connect, etc...) avec cette meme version sans problemes...
    Je me demandais : le constructeur d'une telle classe n'a pas besoin d'être particulier ?? ou il faut mettre un constructeur special et l'appeler à la creation ?? (j'ai un poil oublie...)

    Merci !
    Sincerily

Discussions similaires

  1. Qt::connect: no such slot
    Par MarcelBeaudoin dans le forum Débuter
    Réponses: 4
    Dernier message: 07/03/2015, 18h45
  2. Réponses: 5
    Dernier message: 21/11/2014, 21h40
  3. connect: No such slot
    Par scoutiste dans le forum Débuter
    Réponses: 6
    Dernier message: 05/09/2013, 16h13
  4. probleme QObject::connect SLOT/SIGNAL
    Par sebatlante dans le forum Qt
    Réponses: 3
    Dernier message: 22/03/2008, 11h39
  5. Qt::connect: no such slot ...
    Par fdrouhin dans le forum Qt
    Réponses: 8
    Dernier message: 02/12/2004, 19h11

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