crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> TreeView и модель на базе QAbstractItemModel, как заставить обновляться только определенный node
Delphist
  опции профиля:
сообщение 8.8.2008, 12:26
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 41
Регистрация: 4.8.2008
Из: Россия
Пользователь №: 249

Спасибо сказали: 0 раз(а)




Репутация:   0  


У меня есть класс который имеет ряд свойств и содержит внутри себя 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;
};


Для отображения я использую TreeView и соответственно собственную модель данных
наследованную от QAbstractItemModel. Вопрос такой дело в том что когда у моего
объекта меняется свойство например m_sName, то для всех m_Listeners генерится OnValueChanged.
И нужно чтобы эти изменения сразу отображались в TreeView, вопрос как заставить обновляться не все дерево,
только отдельный элемент.
Конечно можно было сделать так, но это не очень эффективно:
/*прототип*/
OnValueChanged(const СMyClass &myClass)
{
    Node *rootNode = GetNewNode(myClass);
    MyModel->setRootNode(rootNode);
}

void CMyModel::setRootNode(Node *node)
{
    delete rootNode;
    rootNode = node;
    reset();
}
Причина редактирования: для кода используйте тег code=cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
niXman
  опции профиля:
сообщение 8.8.2008, 22:05
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 169
Регистрация: 18.6.2008
Пользователь №: 204

Спасибо сказали: 1 раз(а)




Репутация:   0  


Цитата(void* @ 8.8.2008, 22:21) *
и кстати нет смысла писать явно inline, т.к. по умолчанию итак все методы класса являются inline

Не все. По умолчанию, только те, которые реализованы в декларации класса.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


8 чел. читают эту тему (гостей: 8, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 19.1.2025, 3:34