你错了dataChanged
。如果任何数据项的内容发生变化,则dataChanged
发出信号。假设dataChanged
槽连接到模型上的相同信号,以下不变量成立。
class ... : public QObject {
QModelIndex m_index;
bool m_changed;
Q_SLOT void dataChanged(const QModelIndex & tl) {
m_changed = m_changed || tl == m_index;
}
...
};
m_index = QModelIndex(...);
QVariant before, after;
m_changed = false;
before = model->data(index);
after = model->data(index);
Q_ASSERT(before == after || m_changed);
您所描述的很可能是由模型的不正确行为引起的。有一个模型测试套件可用于验证模型是否符合所需的不变量。
具体解决您的问题点:
当视图本身认为在当前模型更新时添加/删除了新行时,我希望得到通知......
视图不需要相信任何东西。您的模型必须为此发出相关信号。只需连接到来自某些QObject
. 这就是视图所做的一切。如果信号没有触发,则不会通知视图。故事结局。
...或者当模型改变时。
由于整个模型都已更换,因此没有任何信号。你是调用setModel
视图的人,所以这不应该是一个问题。你最好知道什么时候打电话:)