Search code examples
qtlistviewsignals-slotsqabstractitemmodel

QObject::connect issues with QAbstractItemModel


I have a QListView from which I obtain a QAbstractItemModel with list->model();

After this, I want to connect the dataChanged signal to a custom QObject of 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; 

here is my custom object:

 class CustomObject : public QObject
{
    Q_OBJECT

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

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

private:

}; 

Am I doing anything wrong? The QObject call returns true, I have a cout in the onText function, but nothing is ever printed when the QListView is Changed.


Solution

  • That probably means that the signal is never emitted. Try calling

    model->setData( model->index( 0, 0 ), Qt::EditRole, 3.14 );

    If that one doesn't invoke your slot, then the implementation of setData() is probably buggy and doesn't emit dataChanged(QModelIndex,QModelIndex), or else customObject_ has since been deleted.

    If neither is the case, you need to give us more information.