Я новичок в использовании парадигмы модель / представление в Qt и имею следующую проблему: У меня есть древовидная структура, которая должна быть визуализирована через Qt. Я обнаружил, что QAbstractTableModel идеально подходит для моих нужд, поэтому я пишу следующее:
class columnViewModel : public QAbstractTableModel {
// some stuff...
};
Теперь все работает, но теперь мне нужно реализовать шаблон проектирования «Наблюдатель» над узлами моего дерева. Когда узел расширяется в TreeView, я должен добавить наблюдателя к соответствующему узлу. Всякий раз, когда узел рушится, я должен удалить этого Наблюдателя из узла. Итак, я пишу что-то вроде этого:
void onExpand( const QModelIndex & Index ... ) {
Node* myNode = static_cast<Node*>(Index->internalPointer());
Observer* foo = Observer::create();
myNode->addObserver(foo);
// ok up to here, but now where can I save this Observer? I must associate
// it with the Node, but I cannot change the Node class. Is there any way
// to save it within the index?
}
void onCollapse( const QModelIndex & Index ... ) {
Node* myNode = static_cast<Node*>Index->internalPointer();
Observer* foo = // well, what should I write here? Node does not have anything
// like "getObserver()"! Can I extract an Observer from Index?
myNode->remObserver( foo );
}
У меня сейчас нет фрагментов, поэтому код может быть недействительным Qt, но проблема кажется ясной. Я не могу изменить ни Node, ни Observer. У меня может быть внутренний список Наблюдателей, но затем я должен решить, какой Обозреватель удалить из определенного узла. Есть ли способ сохранить указатель Observer в Index (возможно, некоторые пользовательские данные), чтобы быстро разрешить его в onCollapse? Любые идеи приветствуются ...