【问题标题】:How do I call dataChanged我如何调用 dataChanged
【发布时间】:2011-05-14 11:00:34
【问题描述】:

以下是我添加的一个行类。它由代码调用,而不是由表调用,我希望它在添加新行时正确调用 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
}

【问题讨论】:

    标签: c++ qt4 qtableview qabstracttablemodel


    【解决方案1】:

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      相关资源
      最近更新 更多