У меня есть класс который имеет ряд свойств и содержит внутри себя QHash с объектами того же типа в итоге получается иерархический класс:
CMyClass/
{
public:
CMyClass();
inline QString getName() const {return m_sName;}
inline CMyClass *getParent() {return m_pOwner;}
inline CMyClass& operator[](QString sKey) {return getProperty(sKey);}
...
private:
CMyClass& getProperty(QString sKey);
QHash<QString,CMyClass> m_Properties;
QString m_sName;
CMyClass *m_pOwner;
struct ListenerSlot
{/*код не особо имеющий в данном случае значение*/};
QLinkedList<ListenerSlot> m_Listeners;
};
OnValueChanged(const СMyClass &myClass)
{
Node *rootNode = GetNewNode(myClass);
MyModel->setRootNode(rootNode);
}
void CMyModel::setRootNode(Node *node)
{
delete rootNode;
rootNode = node;
reset();
}
что-то я не понял при чем здесь CMyClass, речь вроде о представлении и модели идет?
Дерево и модель взаимодействуют автоматически, и достаточно эфективно, ни чего лишнего не гоняется.
Тебе надо в твоей модели метод получения данных сделать читай http://crossplatform.ru/documentation/qtdoc4.3/model-view-creating-models.php
и кстати нет смысла писать явно inline, т.к. по умолчанию итак все методы класса являются inline
Я имею в виду, что можно просто объявить OnValueChanged сигналом а те, кому интересно его получать просто конектятся к нему. При этом тип ListenerSlot и член m_Listeners становятся ненужными.
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)