Как я могу назвать dataChanged - PullRequest
6 голосов
/ 14 мая 2011

Ниже приведен мой класс добавления строки. Он вызывается кодом, а не таблицей, и я хочу, чтобы он правильно вызывал 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
}

1 Ответ

8 голосов
/ 14 мая 2011

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

...