2009-07-29 5 views
2

J'ai une QListView à partir de laquelle j'obtiens un QAbstractItemModel avec list-> model();QObject :: connecte les problèmes avec QAbstractItemModel

Après cela, je veux connecter le signal dataChanged à une coutume QObject de la mine:

if(QObject::connect(model, SIGNAL(dataChanged (const QModelIndex , const QModelIndex)), 
         customObject_,SLOT(onText(const QModelIndex , const QModelIndex)))) 
    cout << "SIGNAL SLOT connection successful" << endl; 
else 
    cout << "SIGNAL SLOT connection ERROR" << endl; 

ici est mon objet personnalisé:

class CustomObject : public QObject 
{ 
    Q_OBJECT 

public: 
    CustomObject (QObject *parent); 
    ~CustomObject(); 

public slots: 
    void onText(const QModelIndex & topLeft, const QModelIndex & bottomRight); 

private: 

}; 

Est-ce que je fais quelque chose de mal? L'appel QObject renvoie true, j'ai un cout dans la fonction onText, mais rien n'est jamais imprimé lorsque QListView est modifié.

Répondre

4

Cela signifie probablement que le signal n'est jamais émis. Essayez d'appeler

modèle-> setData (modèle-> index (0, 0), Qt :: EditRole, 3.14);

Si celui-ci n'invoque pas votre emplacement, alors l'implémentation de setData() est probablement buggée et n'émet pas dataChanged(QModelIndex,QModelIndex), ou customObject_ a été supprimée depuis.

Si ce n'est pas le cas, vous devez nous donner plus d'informations.

+0

setData n'a pas invoqué mon emplacement, et customObject n'est pas supprimé, je vais essayer un emplacement différent. Merci. –

+0

Des suggestions sur comment l'utiliser? –

+0

connecté à rowsInserted et fonctionne bien, merci –

-1

Avez-vous essayé avec

QObject::connect(model, SIGNAL(dataChanged (const QModelIndex &, const QModelIndex &)), 
        customObject_,SLOT(onText(const QModelIndex &, const QModelIndex &))); 

? aka assurez-vous que les paramètres sont transmis par référence. Vérifiez this tutorial.

+0

OP mentionné 'QObject :: connect()' renvoie 'true'. –

0

peut-être il est & dans votre fonction ..

mais si elle était le problème, il devrait afficher une erreur de votre fonction ...


probablement ce signal n'est pas exprimés. Essayez de vous connecter avec un autre signal .. vous pouvez le tester comme ça ..