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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: proxymodel результат фильтрации  (Прочитано 9320 раз)
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« : Август 29, 2016, 21:20 »

Есть модель. Есть proxymodel модель в которой реализован фильтр filterAcceptsRow.
Скажите как результат фильтрации выделить цветом или шрифт изменить.
Т.е изначально ничего не выделяем, а потом после обработки
выделили желтым цветом ну или шрифт шпоменяли.


Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #1 : Август 29, 2016, 21:30 »

Есть модель. Есть proxymodel модель в которой реализован фильтр filterAcceptsRow.
Скажите как результат фильтрации выделить цветом или шрифт изменить.
Т.е изначально ничего не выделяем, а потом после обработки
выделили желтым цветом ну или шрифт шпоменяли.
Переопределите метод data прокси-модели и возвращайте нужные значения для ролей возвраьта цвета или фонта.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #2 : Август 29, 2016, 22:08 »

Есть модель. Есть proxymodel модель в которой реализован фильтр filterAcceptsRow.
Скажите как результат фильтрации выделить цветом или шрифт изменить.
Т.е изначально ничего не выделяем, а потом после обработки
выделили желтым цветом ну или шрифт шпоменяли.
Переопределите метод data прокси-модели и возвращайте нужные значения для ролей возвраьта цвета или фонта.

Ну я так и делал изначально.
Только мне сразу выделили все желтым цветом
Код
C++ (Qt)
...
if(role==Qt::BackGroundColorRole)
   return QBrush("yellow")
...
 
Непонимающий
Я имею ввиду , что результат работы фильтра выделялся цветом.
Или я может что-то не так делаю??? Непонимающий
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #3 : Август 29, 2016, 22:11 »

Или я может что-то не так делаю??? Непонимающий
Ну так вам нужно вначале проверить "отфильтровался" запрашиваемый row или нет, и вернуть цвет в зависимости от этого.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #4 : Август 29, 2016, 22:26 »

Или я может что-то не так делаю??? Непонимающий
Ну так вам нужно вначале проверить "отфильтровался" запрашиваемый row или нет, и вернуть цвет в зависимости от этого.


Я не знаю как проверить  Обеспокоенный
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #5 : Август 29, 2016, 22:31 »

Вы filterAcceptsRow как реализовали?
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #6 : Август 29, 2016, 22:49 »

Вы filterAcceptsRow как реализовали?

Код
C++ (Qt)
 
bool filterAcceptsRow(int source_row,  const QModelIndex &source_parent)
{
   QModelIndex  index = sourceModel()->index(source_row,1,source_parent);
   QVariant value = sourceModel()->data(index,Qt::DisplayRole);
   if(value.isValid){
       int date = value.toInt();
       return  date == filter;
   }
 
   return  QSortFilterProxyModel::filterAcceptsRow(source_row,source_parent);
}
 
 
« Последнее редактирование: Август 29, 2016, 23:34 от demaker » Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #7 : Август 29, 2016, 23:41 »

Есть
Код:
void setFilterRole(int )
int filterRоle()
Только как они помогут?
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #8 : Август 30, 2016, 07:43 »

Вот, меня тоже подобное всегда интересовало при работе с моделями и фильтрацией.

Как сделать выделение найденного после фильтрации подобно тому как на этой картинке:
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #9 : Август 30, 2016, 09:34 »

Скажите так как можно сделать Непонимающий
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #10 : Август 30, 2016, 09:59 »

Вот, меня тоже подобное всегда интересовало при работе с моделями и фильтрацией.

Как сделать выделение найденного после фильтрации подобно тому как на этой картинке:


Тут, или с делегатом работать -- в методе рисования рисовать выделение на тексте
Или аналогично в методе рисования view
Записан

Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #11 : Август 30, 2016, 10:23 »

Я не знаю как проверить  Обеспокоенный

Код
C++ (Qt)
QVariant ProxyModel::data( const QModelIndex &index, int role ) const
{
   ...
   if( role==Qt::BackGroundColorRole )
   {
       const QModelIndex src = mapToSource( index );
       if( filterAcceptsRow( src.row(), QModelIndex() ) )
           return QBrush("yellow");
   }
 
   return QVariant();
}
 
Записан
kamre
Частый гость
***
Offline Offline

Сообщений: 233


Просмотр профиля
« Ответ #12 : Август 30, 2016, 11:06 »

Тут, или с делегатом работать -- в методе рисования рисовать выделение на тексте
Или аналогично в методе рисования view
А примера готового нет для такой фильтрации в дереве? А то у меня даже просто фильтрация в дереве без подсветки найденного не работает. Фильтр для дерева тупо работает: оставляет только те узлы в дереве, у которых весь путь до корня под фильтр попадает.
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 960


Просмотр профиля
« Ответ #13 : Август 30, 2016, 11:16 »

Я не знаю как проверить  Обеспокоенный

Код
C++ (Qt)
QVariant ProxyModel::data( const QModelIndex &index, int role ) const
{
   ...
   if( role==Qt::BackGroundColorRole )
   {
       const QModelIndex src = mapToSource( index );
       if( filterAcceptsRow( src.row(), QModelIndex() ) )
           return QBrush("yellow");
   }
 
   return QVariant();
}
 

Но мне нужно - что если фильтр пустой отображать всю таблицу без выделения цветом.
А после фильтрации то да.
Получается так что изначально у меня таблица тоже вся выделена
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4349



Просмотр профиля
« Ответ #14 : Август 30, 2016, 11:25 »

Но мне нужно - что если фильтр пустой отображать всю таблицу без выделения цветом.

Ну вы можете проверять попадает ли строка под фильтр, тем же самым кодом, что у вас в filterAcceptsRow, но до установки фильтра.
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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