2011-05-14 3 views
5

다음은 행 추가 클래스입니다. 이 코드는 테이블이 아니라 코드에 의해 호출되며 새로운 행을 추가 할 때 dataChanged를 제대로 호출하기를 원합니다. 작동하지 않지만 테이블은 아무 것도하지 않습니다. 내가 뭘 잘못하고 있니?어떻게 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 
} 

답변

8

dataChanged는 기존 데이터에서 작동, 당신은 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 
} 
작동합니다

를 호출해야합니다. 심지어 필요하지 않을 수도 있습니다. emit dataChanged

관련 문제