C++ (Qt)CMyClass{public:        CMyClass();     inline QString getName() const {return m_sName;}                inline CMyClass *getParent() {return m_pOwner;}    inline CMyClass& operator[](QString sKey) {return getProperty(sKey);}                ...    void setInt(int v);    void setName(QString v);                 ...    private:    CMyClass& getProperty(QString sKey);    QHash<QString,CMyClass*> m_Properties;        QString          m_sName;    int                  m_nCode;    CMyClass      *m_pOwner;};
C++ (Qt)void MyModel::modelChanged(int nCode, CSharedVariant &Value){    QModelIndex curIndex;//    curIndex = indByNode(Value, 0);//    emit dataChanged(curIndex, curIndex);        curIndex = indByNode(Value, 1);    emit dataChanged(curIndex, curIndex);} QModelIndex MyMode::indByNode(CSharedVariant& node, int col){    if (node.getOwner()) {        int row = indexOf(node.getOwner(), &node);        if (row == -1)             return QModelIndex();        return createIndex(row, col, &node);    }    return QModelIndex();}
// Начинаются добавляться данные beginInsertRows(QModelIndex(), table.size(), table.size() + 1); // Новая запись размещается в списке table << tmpline; // Добавление данных закончено, далее вид должен сам знает что надо // обновить на экране чтоб была видно новая строка endInsertRows();
// Начинается удаление записи beginRemoveRows(QModelIndex(),i,i); // Удаляется элемент table.takeAt(i); // Удаление записи закончено endRemoveRows();
C++ (Qt)void MyModel::nodeBeforeDestroyed(int nCode, CMyClass &Value){ /* CMyClass имеет свойство markDeleted, которое = true если экземляр CMyClass'a помечен на удаление, так вот у данного Value.markDeleted==true */ int i = indexOf(Value.getOwner(), &Value); QModelIndex idx = indByNode(*Value.getOwner()); beginRemoveRows(idx, i, i); /* удалять здесь по настоящему Value через delete нельзя т.к. он удаляется самим классом в нужный момент я всего лишь должен не отображать его в TreeView */ endRemoveRows();}