2011-05-14 8 views
5

La siguiente es mi clase agregar una fila. El código lo llama, no la tabla, y quiero que llame adecuadamente a DataChanged cuando se agrega una nueva fila, aunque esto no funciona, la tabla no hace nada. ¿Qué estoy haciendo mal?Cómo llamo dataChanged

void MyModel::add(const Person& p) 
{ 
    people.push_back(p); 

    QModelIndex top = createIndex(people.count() - 1, 0, 0); 
    QModelIndex bottom = createIndex(people.count() - 1, 3, 0); 

    emit dataChanged(top, bottom); // emit layoutChanged() if headers changed 
} 

Respuesta

8

dataChanged sólo funcionan en los datos existentes, es necesario llamar a beginInsertRows()/endInsertRows()

void MyModel::add(const Person& p) 
{ 
    beginInsertRows(QModelIndex(), people.count(), people.count()); 
    people.push_back(p); 
    endInsertRows(); 

    QModelIndex top = createIndex(people.count() - 1, 0, 0); 
    QModelIndex bottom = createIndex(people.count() - 1, 3, 0); 

    emit dataChanged(top, bottom); // emit layoutChanged() if headers changed 
} 

que debería funcionar. Puede ser que ni siquiera necesite emit dataChanged

Cuestiones relacionadas