Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Fregloin от Март 21, 2014, 16:31



Название: Обновление модели через QSortFilterProxyModel
Отправлено: Fregloin от Март 21, 2014, 16:31
Привет. Такой вот вопрос. Есть модель, все работает отлично.
Есть sortProxy, задача которого фильтровать модель.
Проблема в следующем, при определенных условиях модель ловит сигнал и должна обновить определенную строку.
так вот когда фильтр задан, то эти строки не обновляются, если фильтр убрать - то данные в таблице обновляются. Как быть?

Вот обновление модели по сигналу
Код:
void CRailObjectListModel::updateItemAttach(QRailItem *item, const CInterfaceTag &roleTag)
{
    Q_UNUSED(item)
    Q_UNUSED(roleTag)
    CViewToModelLink    *   link = qobject_cast<CViewToModelLink*>(sender());
    Q_ASSERT(link);
    int indexOfObject = farray->objects().values().indexOf(link->railObject());
    if(indexOfObject>=0)
    {
        dataChanged(createIndex(indexOfObject,0),createIndex(indexOfObject,maxColumn)); //обновляем всю строку в модели
    }
}

А вот устанавливаю прокси модель
Код:
    fsortRailObjectModel.setSourceModel(&flistModel); //QSortFilterProxyModel...
    connect(fform,SIGNAL(filterChange(QString)),&fsortRailObjectModel,SLOT(setFilterWildcard(QString)));
    fform->setObjectModel(&fsortRailObjectModel);

Как сделать так, что бы при установленном фильтре корретно обновлялись строки в таблице?


Название: Re: Обновление модели через QSortFilterProxyModel
Отправлено: Fregloin от Март 21, 2014, 16:37
Выяснилось, что при фильтровании, если остается только одна строка - то она обновляется нормально, если строк больше чем 1 в таблице после фильтрации, то строка не обновится пока виджет не потеряет фокус или не кликнуть по нему...


Название: Re: Обновление модели через QSortFilterProxyModel
Отправлено: kambala от Март 21, 2014, 18:58
а разве есть гарантия, что values() всегда будет выдавать одинаковый порядок элементов? насколько я понял, farray->objects() возвращает словарь или хэш.