QObject :: Connect problemi con QAbstractItemModel
-
20-09-2019 - |
Domanda
Ho un QListView da cui posso ottenere un QAbstractItemModel con Lista-> modello ();
Dopo questo, voglio collegare il segnale DataChanged ad un QObject mia abitudine:
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;
ecco il mio oggetto personalizzato:
class CustomObject : public QObject
{
Q_OBJECT
public:
CustomObject (QObject *parent);
~CustomObject ();
public slots:
void onText(const QModelIndex & topLeft, const QModelIndex & bottomRight );
private:
};
Sto facendo qualcosa di sbagliato? La chiamata QObject restituisce vero, ho un cout nella funzione ONTESTO, ma nulla è mai stampato quando il QListView è cambiato.
Soluzione
Questo probabilmente significa che il segnale non viene mai emesso. Prova a chiamare
modello-> setData (modello-> index (0, 0), Qt :: EditRole, 3.14);
Se quella non invocare lo slot, quindi l'attuazione di setData()
è probabilmente buggy e non emette dataChanged(QModelIndex,QModelIndex)
, oppure customObject_
da allora è stato cancellato.
Se non è il caso, è necessario darci più informazioni.
Altri suggerimenti
forse c'è e nella funzione ..
ma se fosse il problema, dovrebbe mostrare un errore da parte vostra funzione ...
Probabilmente questo segnale non è emmited. Provare a connettersi con un altro segnale .. è possibile verificare in quel modo ..
Hai provato con
QObject::connect(model, SIGNAL(dataChanged (const QModelIndex &, const QModelIndex &) ),
customObject_,SLOT(onText(const QModelIndex &, const QModelIndex &)) );
? aka assicurarsi che i parametri vengono passati per riferimento. Controllare questo tutorial .