Question

J'ai une méthode onText qui se connecte à un SIGNAL rowsInserted de QAbstractItemModel pour pouvoir être averti lorsque de nouvelles lignes ont été insérées:

QObject::connect(model, SIGNAL(rowsInserted ( const QModelIndex & , int , int  )  ),
                        client_,SLOT(onText( const QModelIndex & , int , int  )) )

Le signal fonctionne correctement car je suis averti lorsque des lignes sont insérées. Voici la méthode onText:

void FTClientWidget::onText( const QModelIndex & parent, int start, int end ) 
{
    Proxy::write("notified!");

    if(!parent.isValid())
        Proxy::write("NOT VALID!");
    else
        Proxy::write("VALID");

     QAbstractItemModel* m = parent.model();


}

Mais je n'arrive pas à obtenir la chaîne des éléments insérés. Le QModelIndex " parent " passé n'est PAS VALIDE, et "m". QAbstractItemModel est NULL. Je pense que c'est parce que ce n'est pas un élément réel, mais juste un pointeur sur un? Comment puis-je obtenir le texte / les éléments insérés?

Était-ce utile?

La solution

Le parent n'étant pas valide pour les éléments de niveau supérieur, une autre option consisterait à donner à FTClientWidget accès au modèle (s'il ne viole pas la conception souhaitée). FTClientWidget peut alors utiliser les arguments de début et de fin directement sur le modèle. modèle lui-même:

void FTClientWidget::onText( const QModelIndex & parent, int start, int end ) 
{
   //Set our intended row/column indexes 
   int row = start;
   int column = 0;

   //Ensure the row/column indexes are valid for a top-level item
   if (model_->hasIndex(row,column))
   {
      //Create an index to the top-level item using our 
      //previously set model_ pointer
      QModelIndex index = model_->index(row,column);

      //Retrieve the data for the top-level item
      QVariant data = model_->data(index);
   }
}

Autres conseils

Le parent sera toujours non valide pour les éléments de niveau supérieur, vous pouvez donc vous attendre à ce qu'il ne soit pas valide. La documentation de Qt contient une bonne explication de exactement comment fonctionne le parent. début est la première ligne à laquelle un enfant a été inséré, et fin est la dernière ligne à laquelle un enfant a été inséré.

Ainsi, vous pouvez y accéder avec quelque chose comme ce qui suit:

int column = 0;

// access the first child
QModelIndex firstChild = parent.child(first, column);
QModelIndex lastChild = parent.child(end, column);

// get the data out of the first child
QVariant data = firstChild.data(Qt::DisplayRole);

Ou, si vous le souhaitez, vous pouvez utiliser l'index pour récupérer le modèle à partir duquel vous pouvez y accéder.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top