Ayuda para obtener datos insertados después de la señal de inserción de fila de Qt
-
05-07-2019 - |
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?
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.