2009-09-27 24 views
8

Estoy un poco confundido acerca de la forma correcta de reiniciar o borrar los datos asociados con un QAbstractItemModel. Estoy escribiendo una aplicación en la que el usuario puede "comenzar de nuevo" con un nuevo conjunto de datos (vacío o pequeño).Borrar/restablecer un modelo en qt (eliminar todas las filas)

¿Debo eliminar el modelo anterior cuando el usuario realiza esta solicitud? ¿O debería dejar el modelo solo y simplemente eliminar todas las filas?

Saludos, Dan O

Respuesta

4

En general, preferiría que el modelo reaccione a los cambios y tome las medidas necesarias para actualizar su visualización (indirectamente, por supuesto). Sin embargo, los modelos de programación pueden ser (= es) un PITA, por lo que probablemente miraría a través de los dedos si estuviera revisando el código que creó un nuevo modelo y eliminé el anterior. Solo haga esto si está seguro de que el usuario solo eliminará todas las filas. Si el usuario puede eliminar elementos del modelo de forma incremental, probablemente sea mejor que no implemente la eliminación correctamente en primer lugar ...

Además, ModelTest puede ayudarlo a descubrir problemas con sus modelos Qt.

4

Si el usuario está realmente empezar de nuevo con un nuevo conjunto de datos, entonces tiene sentido para mí simplemente borrar el viejo modelo y crear una nueva. Simple, efectivo, y coincide con lo que el usuario está haciendo.

5

no sé qué camino que realmente "mejor", pero la eliminación de todas las filas puede ser una función bastante simple algo como:

void MyModel::Clear(void) 
{ 
    // remove all data from internal data structures 
    ... 

    // Call QAbstractItemModel::reset to ensure any views know that everything has changed. 
    reset(); 
} 
+3

esto no es suficiente. QT ofrece los modelos beginResetModel y endResetModel que se deben usar – IceFire

Cuestiones relacionadas