LINUX.ORG.RU

QTreeView + setRootIndex + model reset

 


0

1

Как быть, если в модели, установленной для QTreeView произошёл reset и поменялись индексы, в том числе root-индекс, установленный в QTreeView (через setRootIndex)?

★★

Ответ на: комментарий от grondek

То есть наследовать QTreeView и в setSourceModel коннектить сигнал modelReset от модели к своему слоту? Ok, а дальше? После reset в модели может не сразу появиться нужный индекс.. Как его отследить и как сделать так, чтобы вьюха была пустая, пока корневой индекс в модели не появится?

i82 ★★
() автор топика
Ответ на: комментарий от i82

Модель имеет сигналы dataChanged, rowsInserted, columnsInserted они по-умолчанию связываются со слотами QAbstractItemView. Если тебе еще что-то надо от них, то, да, можешь наследоваться и сделать свои слоты.

grondek
()
Ответ на: комментарий от grondek

кэп, спасибо. как это мне поможет решить мою задачу? только не общими словами про сигналы и слоты :)

i82 ★★
() автор топика
Ответ на: комментарий от i82

Я не понимаю твою задачу. Если у тебя поменялись данные в модели, то при использовании стандартных QTreeView и модели, все на отображении должно обновиться самостоятельно.

Если тебе надо поменять rootIndex для QTreeView при изменении данных в модели, то наследуйся от QTreeView и лови QAbstractItemModel::dataChanged и другие сигналы.

Кстати, а зачем у тебя делается reset модели? Это же очень тяжелая операция, и ее вообще нежелательно делать на мой взгляд (ну кроме фильтрации или сортировки), а обновлять только отдельные индексы.

grondek
()
Ответ на: комментарий от grondek

У меня есть древовидная модель с одним корнем, который при отображении я не хочу показывать. Ты правильно говоришь, что reset в общем случае это тяжелая операция. Но сами Тролли в доках говорят, что если данных обновляется много, то иногда проще обновить все и сделать reset. Собственно, вот и проблема. Кроме того, поверх модели накручена sort-filter прокся, которая также перестраивает индексы, которые идут во вьюху.

i82 ★★
() автор топика
Ответ на: комментарий от grondek

В общем всё получилось, спасибо!

i82 ★★
() автор топика
Ответ на: комментарий от grondek

На всякий случай, если надо сохранить индекс между ресетами (при условии, что в модели физически по этому индексу что-то будет лежать) можно использовать QPersistentModelIndex. Они как раз для этого, их можно хранить пока существует модель.

i82 ★★
() автор топика
Ответ на: комментарий от UVV

бывает :) я ж фанатик красноглазый)

i82 ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.