Russian Qt Forum

Qt => Model-View (MV) => Тема начата: UVV от Февраль 12, 2015, 17:00



Название: Кнопка freeze для Model-View
Отправлено: UVV от Февраль 12, 2015, 17:00
Привет.
Есть список некоторых данных, скажем 100. Данные отображаются в 2-х tableView, в одном все, в другом только последняя строка. Когда приходит новая порция, то старые с начала списка выбрасываются, а новые пишутся в конец.

Теперь такой нюанс, у первого View есть кнопка freeze, т.е. данные должны замереть. Во втором же view так и должны проскакивать новые. Чтобы это решить, я сделал атрибут visible в данных, а для первой view использую FilterModel, в которой фильтрую те, которые не должны быть видны, пока freeze активна.
Когда убираешь freeze, то новым делается setVisible(true).

Вопросы вот в чём.
- Чтобы иметь какой-то буфер, я установил количество видимых элементво в уже упомянутые 100, а верхнуюю границу контейнера (т.е. когда старые нужно выбрасывать) в два раза больше. Нормальный ли подход или как-нибудь по-другому посоветуете?
- В данной реализации фильтр работает так:
Код:
    bool FilterModel::filterAcceptsRow
    (int source_row, const QModelIndex & source_parent) const
    {
        QModelIndex source_index =
            sourceModel()->index(source_row, filterKeyColumn(), source_parent);
        return sourceModel()->data(source_index, MyModel::VisibilityRole).toBool();
    }

Почему-то, когда в модели делаю emit dataChanged(), т.е. хочу, чтобы те, которые были невидимы, отобразились - не работает. Приходится делать filterModel->invalidate(); отбой dataChanged() нормально работает, ошибку нашёл =)


Название: Re: Кнопка freeze для Model-View
Отправлено: Fregloin от Февраль 13, 2015, 11:55
mapFromSource/mapToSource заюзали?


Название: Re: Кнопка freeze для Model-View
Отправлено: UVV от Февраль 13, 2015, 11:56
mapFromSource/mapToSource заюзали?
Нет, зачем?