crossplatform.ru

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


  Ответ в TreeView и модель на базе QAbstractItemModel, как заставить обновляться только определенный node
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
Tonal Дата 11.8.2008, 10:40
  Я имею в виду, что можно просто объявить OnValueChanged сигналом а те, кому интересно его получать просто конектятся к нему. При этом тип ListenerSlot и член m_Listeners становятся ненужными.
Delphist Дата 11.8.2008, 8:52
 
Цитата(Tonal @ 10.8.2008, 14:05) *
Кстати, а зачем ты дублируешь Qt-шную систему сигнал/слот с помощью QLinkedList<ListenerSlot>? Сигнал/слот вполне хорошо с этим справляется.

Не понял
Tonal Дата 10.8.2008, 14:05
 
Цитата(Delphist @ 8.8.2008, 16:26) *
...вопрос как заставить обновляться не все дерево, а только отдельный элемент.

Послать OnValueChanged модельке, которая преобразует const СMyClass & в QModelIndex и сгенерирует сигнал dataChanged. Нет?

Кстати, а зачем ты дублируешь Qt-шную систему сигнал/слот с помощью QLinkedList<ListenerSlot>? Сигнал/слот вполне хорошо с этим справляется. :)
niXman Дата 8.8.2008, 22:05
 
Цитата(void* @ 8.8.2008, 22:21) *
и кстати нет смысла писать явно inline, т.к. по умолчанию итак все методы класса являются inline

Не все. По умолчанию, только те, которые реализованы в декларации класса.
void* Дата 8.8.2008, 21:21
  и кстати нет смысла писать явно inline, т.к. по умолчанию итак все методы класса являются inline
Litkevich Yuriy Дата 8.8.2008, 15:06
  Дерево и модель взаимодействуют автоматически, и достаточно эфективно, ни чего лишнего не гоняется.
Тебе надо в твоей модели метод получения данных сделать читай тут
Delphist Дата 8.8.2008, 13:38
 
Цитата(Litkevich Yuriy @ 8.8.2008, 13:31) *
что-то я не понял при чем здесь CMyClass, речь вроде о представлении и модели идет?

Да, все правильно, но ведь модель будет строится на данных CMyClass
Litkevich Yuriy Дата 8.8.2008, 13:31
  что-то я не понял при чем здесь CMyClass, речь вроде о представлении и модели идет?
Delphist Дата 8.8.2008, 12:26
  У меня есть класс который имеет ряд свойств и содержит внутри себя 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();
}
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 18.4.2024, 16:46