LINUX.ORG.RU

QSоrtFilterPrоxyMоdеl для TrееViеw

 ,


0

3

переопределил функцию lessThan для того, чтобы перевернуть исходную модель

lessThan(const QModelIndex &left, const QModelIndex &right) const
{
    if (left < right)
        return false;
    else
        return true;
}

все отлично работает до того момента когда попыпаться развернуть любую ветвь и попробовать добавить новый элемент. После этого все ветви сворачиваются и появляются дублирующие элементы. Подскажите в чем проблема? Спасибо.

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

По существу пока написать ничего не могу, так как с моделями работаю достаточно редко, да и сортировкой никогда не заморачивался. Есть смутное подозрение, что здесь надо учитывать много нюансов (валидность индексов, предков и прочее), но, во-первых, я не смотрел реализацию оператора < для индексов (может, там это уже делается) и, во-вторых, это предположение «пальцем в небо», так как см. выше. Могу посоветовать поставить точку останова и смотреть, какие индексы сравниваются — особенно проверяй те, которые идут дублями, может, чего и выудишь. На всякий случай: у индекса 4 главных параметра — модель, предок, строка и столбец. Вот все четыре для обоих и смотри

XMs ★★★★★
()

The less than calculation is not directly useful to developers - the way that indexes with different parents compare is not defined

Нежелательно напрямую сравнивать QModelIndex. Посмотри как реализована функция QSortFilterProxyModel::lessThan и сделай аналогично.

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

если я закомментирую свою реализацию функции lessThan, то проблема не исчезает. Но если я использую исходную модель а не проксю, то все нормально

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

Попробуй сделать маленький тестовый проект на виджетах и там отладить. Просто вьюха, модель и прокси с тестовыми данными. Если в тесте работает, то косяк где-то еще.

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