c++ - 我如何调用 dataChanged

标签 c++ qt4 qtableview qabstracttablemodel

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

最佳答案

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

关于c++ - 我如何调用 dataChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6001376/

相关文章:

c++ - QPushButton 未显示在 QTableView 上(使用 QItemDelegate 过程)

c++ - 为什么 queue:front() 的返回值在 queue::pop() 之后有效

c++ - 在 Eclipse 中构建后没有二进制文件

python - 如何防止 Qt 按钮出现在单独的框架中?

qt - 如何使用 Homebrew 软件在 macOS 上安装 qt4?

QTableView "ResizeToContents"启用排序后列太宽

qt - 在 QTableView 列中显示 QAbstractListModel 项目

c++ - 使用模板特化来区分值和(值的)数组

c++ - c++中构建依赖和执行DI

c++ - GtkVBox Qt 等价物