については間違ってい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
なので、問題にはなりません。電話がいつ行われたかを知っておくとよいでしょう :)