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

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

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QSortFilterProxyModel - фильтр по списку  (Прочитано 11780 раз)
Serega
Самовар
**
Offline Offline

Сообщений: 127


Просмотр профиля
« Ответ #15 : Апрель 26, 2015, 14:56 »

Хорошо. Выкрутился снова:
Код
C++ (Qt)
 connect( m_proxyLineEdit, SIGNAL( textChanged( QString const & ) ),
          m_proxyModel, SLOT( setFilterWildcard( QString const & ) ) );
 
 connect( m_proxyLineEdit, SIGNAL( textChanged( QString const & ) ),
          m_proxyModel, SIGNAL( proxyDataChanged() ) );

Но как то не совсем интуитивно по поводу приоритета сигналов. Может ли случиться, сначала перерасчет счетчика, а затем фильтрация?
Но тем не менее работает правильно.
Записан
Serega
Самовар
**
Offline Offline

Сообщений: 127


Просмотр профиля
« Ответ #16 : Май 01, 2015, 06:58 »

Как то весьма не эффективно получается такое переопределение (намеренно упростил):
Код
C++ (Qt)
bool ProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const
{
 QString word = sourceModel()->data(sourceModel()->index(sourceRow, 0, sourceParent)).toString();
 qDebug() << "word" << word;
 
 return true;
}
При добавлении нового пункта в список, весь список идет полностью по кругу через фильтр.
Или это происходит потому, что пункт добавляю в модель-источник?
Записан
Serega
Самовар
**
Offline Offline

Сообщений: 127


Просмотр профиля
« Ответ #17 : Май 02, 2015, 18:04 »

Все таки не удается толком сбросить фильтрацию прокси модели после упорядочивания по возрастанию или убыванию. Сброс простой. emit resetFilter(); отсылает сигнал прокси модели выдать invalidate();. Далее перезаряжаем список источника m_sourse->importFromFile( m_ExportPath );:
Код
C++ (Qt)
void ProxyPaneWidget::resetProxy()
{
 emit resetFilter();
 m_sourse->importFromFile( m_ExportPath );
}

Код
C++ (Qt)
void ProxyModel::clearFilterSet()
{
 invalidate();
 reset();
}
reset(); - то же пробовал на всякий случай.
Список источника перезаряжается, что ведет к исходному упорядочиванию в виджете представления прокси модели.
Однако при добавлении очередного пункта в источник, автоматически весь список снова сортируется по возрастанию или убыванию в зависимости, что до этого было установлено. Т.е. invalidate(); не работает как ожидалось.
Иными словами не удается отменить сортировку.
В чем может быть ошибка?
« Последнее редактирование: Май 02, 2015, 18:33 от Serega » Записан
Serega
Самовар
**
Offline Offline

Сообщений: 127


Просмотр профиля
« Ответ #18 : Май 02, 2015, 18:56 »

Снова способ проб и ошибок дал результат. Все очень просто, не надо даже перезаряжать модель-источник. Но как то халтурно:
Код
C++ (Qt)
void ProxyPaneWidget::resetProxy()
{
 m_proxyModel->sort(1);
}
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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