Название: [Решено] QSortFilterProxyModel и добавление строк в QTreeView Отправлено: Joss от Июль 30, 2009, 01:03 Друзья,
замечательный форум! Подскажите, пожалуйста, новичку: - Есть модель дерева на основе QAbstractItemModel. - Строчку из одной ветки нужно переместить во вторую (реализовал через removeRows и insertRows). - Если ветка не содержит внутренних элементов ее надо скрыть (реализовал через QSortFilterProxyModel - скрываю ветки у которых нет дочерних элементов). Наверное у меня даже два вопроса, первый может быть глупый, но: 1. Работая с моделью (например, вызывая insertRows), мы должны какую модель использовать? Основную или прокси? Если прокси, то какую модель мы получаем вызовом QAbstractItemView::model () ? 2. Основная проблема - если ветка, куда мы хотим переместить строку скрыта в данный момент (т.к. она пустая) в модели-прокси, то у меня ничего не получается - т.е. вставка происходит помимо этой ветки, скрытая ветка так и не появляется (а должна по идее, когда в ней появляются дочерние элементы). Постараюсь схематично: --A1 ----C1 ----C2 - A2 (пустая, скрытая) я хочу переместить C1 в A2 (удаляя элемент, вставляя в новую позицию и занося данные) --A1 ----C2 - A2 (эта ветка по идее должна появится, т.к. в прокси стоит проверка на число дочерних элементов, но она не появляется) ----C1 Вот, заранее спасибо за ответы! Название: Re: QSortFilterProxyModel и добавление строк в QTreeView Отправлено: Авварон от Июль 30, 2009, 08:59 вставлять надо в родную модель. прокси модель перестраивается на основе основной
Название: Re: QSortFilterProxyModel и добавление строк в QTreeView Отправлено: Joss от Июль 30, 2009, 21:08 На часть вопросов сам получил ответы:
Цитировать Работая с моделью (например, вызывая insertRows), мы должны какую модель использовать? Насколько я понял, можно работать с любой моделью. Но если мы хотим использовать исходную модель, то нужно приводить текущий индекс через mapToSource к индексу исходной модели.Цитировать Если прокси, то какую модель мы получаем вызовом QAbstractItemView::model () Получаем модель прокси.Но проблема вот в чем, если не использовать reset(), но новая строка не видна (вместе со скрытой веткой). А как обойтись без reset()? Код insertRows в основной модели: Код: bool TreeModel::insertRows(int position, int rows, const QModelIndex &parent) { Вот если оставить там reset() то все идеально работает - но это неправильно, да и модель сворачивается. Можно ли обойтись без reset()? Название: Re: QSortFilterProxyModel и добавление строк в QTreeView Отправлено: Joss от Июль 30, 2009, 21:14 Я нашел решение, заменив reset() на посылку сигнала layoutChanged ().
Но насколько это правильно и почему без этого не работало, я не понимаю. Название: Re: [Решено] QSortFilterProxyModel и добавление строк в QTreeView Отправлено: p166 от Ноябрь 03, 2009, 13:41 Самодостаточно...
|