QObject::connect problemas com QAbstractItemModel
-
20-09-2019 - |
Pergunta
Eu tenho um QListView do qual obtenho um QAbstractItemModel com list->model();
Depois disso, quero conectar o sinal dataChanged a um QObject personalizado meu:
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;
aqui está meu objeto personalizado:
class CustomObject : public QObject
{
Q_OBJECT
public:
CustomObject (QObject *parent);
~CustomObject ();
public slots:
void onText(const QModelIndex & topLeft, const QModelIndex & bottomRight );
private:
};
Estou fazendo algo errado?A chamada QObject retorna verdadeiro, tenho um cout na função onText, mas nada é impresso quando o QListView é alterado.
Solução
Isso provavelmente significa que o sinal nunca é emitido. Tente ligar
Model-> setData (Model-> Index (0, 0), Qt :: Editrole, 3.14);
Se esse não invocar seu slot, então a implementação de setData()
provavelmente é buggy e não emite dataChanged(QModelIndex,QModelIndex)
, se não customObject_
desde então foi excluído.
Se também não for o caso, você precisa nos fornecer mais informações.
Outras dicas
Talvez exista e em sua função ..
Mas se fosse o problema, deve exibir um erro pela sua função ...
Provavelmente esse sinal não é emmitido. Tente se conectar com outro sinal .. você pode testá -lo assim ..
Você tentou com
QObject::connect(model, SIGNAL(dataChanged (const QModelIndex &, const QModelIndex &) ),
customObject_,SLOT(onText(const QModelIndex &, const QModelIndex &)) );
?ou seja, certifique-se de que os parâmetros sejam passados por referência.Verificar este tutorial.