Pregunta

Tengo un método onText que se conecta a una SIGNAL Insertada de las filas de QAbstractItemModel para que pueda recibir una notificación cuando se hayan insertado nuevas filas:

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

La señal funciona bien, ya que se me notifica cuando se insertan filas. Aquí está el método 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();


}

Pero parece que no puedo obtener la cadena de los elementos insertados. El QModelIndex " padre " pasado NO ES VÁLIDO, y " m " QAbstractItemModel es NULL. Creo que es porque no es un elemento real, sino solo un puntero a uno. ¿Cómo obtengo una retención del texto / elementos insertados?

¿Fue útil?

Solución

Como el elemento principal no será válido para los elementos de nivel superior, otra opción sería otorgar a FTClientWidget acceso al modelo (si no viola su diseño previsto), y luego FTClientWidget puede usar los argumentos de inicio y fin directamente en la modelo en sí mismo:

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);
   }
}

Otros consejos

El padre siempre será inválido para los elementos de nivel superior, por lo que puede esperar que no sea válido. La documentación de Qt tiene una buena explicación de exactamente como trabaja el padre start es la primera fila en la que se insertó un niño, y end es la última fila en la que se insertó un niño.

Por lo tanto, puedes acceder a él con algo como lo siguiente:

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);

O, si lo desea, puede usar el índice para recuperar el modelo desde el que puede acceder.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top