2011-05-14 38 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