2011-01-16 12 views
11

Dentro de una subclase QAbstractListModel ya instanciada, ¿cómo agrego una fila con datos en cada columna y hago que la QListView asociada muestre la nueva fila?Agregar mediante programación una nueva fila a la subclase QAbstractListModel

Parece que la única forma de hacerlo es volver a implementar insertRow y setData en mi modelo, y luego hackearlos juntos en algún tipo de secuencia dentro de otra función para agregar una fila. ¿Debo hacer esto? Seguramente Qt debe hacer que sea más fácil agregar una nueva fila.

¡Muchas gracias! --Dany.

+1

Al mirar esta pregunta de nuevo, me di cuenta que estaba quemada simplemente fuera cuando la escribí: P Mi pregunta en palabras simples es: ¿cómo hacer Agregué una nueva fila a mi subclase QAbstractItemModel? –

Respuesta

15

Simplemente cambie el almacenamiento de datos de su modelo, entre beginInsertRows() y endInsertRows().

Por ejemplo, supongamos que tiene un modelo de lista plana y su modelo almacena los datos internamente en un QVector m_data. Usted quiere anteponer la lista, es decir, insertar una fila en la posición 0:

beginInsertRows(QModelIndex(), 0, 0); //notify views and proxy models that a line will be inserted 
m_data.prepend(somedata); // do the modification to the model data 
endInsertRows(); //finish insertion, notify views/models 
+0

Esto funcionó muy bien, y fue un gran avance para finalmente ver algunos elementos en mi vista de lista. Sin embargo, he pasado literalmente un día y medio tratando de resolver todo esto, y ahora mi último problema es tratar de mostrar un conjunto de datos de 1x4. Actualmente, solo muestra una columna de datos y ninguno de los encabezados de columna. ¿Tiene alguna indicación sobre lo que está pasando mal? Estoy casi completamente frustrado con lo difícil que es hacer que Qt haga algo tan simple como enumerar datos. Dany. –

+3

@nessup: QListView solo admite una columna. Si quiere varias columnas y encabezados, debe usar QTreeView o QTableView. –

1

Me temo que tienes que hacerlo de esa manera. De los docs:

modelos que proporcionan interfaces a las estructuras de datos de listas de tamaño variable, como puede proporcionar implementaciones de insertRows() y removeRows().

+0

esos enlaces están muertos – Aidenhjj

Cuestiones relacionadas