Russian Qt Forum
Ноябрь 23, 2024, 07:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Обновление модели через QSortFilterProxyModel  (Прочитано 2610 раз)
Fregloin
Супер
******
Offline Offline

Сообщений: 1025


Просмотр профиля
« : Март 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);

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

Сообщений: 1025


Просмотр профиля
« Ответ #1 : Март 21, 2014, 16:37 »

Выяснилось, что при фильтровании, если остается только одна строка - то она обновляется нормально, если строк больше чем 1 в таблице после фильтрации, то строка не обновится пока виджет не потеряет фокус или не кликнуть по нему...
« Последнее редактирование: Март 21, 2014, 16:51 от Fregloin » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #2 : Март 21, 2014, 18:58 »

а разве есть гарантия, что values() всегда будет выдавать одинаковый порядок элементов? насколько я понял, farray->objects() возвращает словарь или хэш.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.042 секунд. Запросов: 22.