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

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

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

Сообщений: 962


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

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

Да я проверяю делаю так
Код
C++ (Qt)
bool DataBaseFilterModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{  
   int column = filterKeyColumn();
   if(column == 0){
       if(strFilter_0.isEmpty()){
           return true; // если здесь true не будет то я всю таблицу не увижу !!!
       }
       else{
           QModelIndex index = sourceModel()->index(source_row,column,source_parent);
           QVariant value = sourceModel()->data(index,Qt::DisplayRole);
           if(value.isValid()){
               int date = value.toInt();
               int filter = strFilter_0.toInt();
               return date == filter;
           }
       }
   }
}
 
bool DataBaseFilterModel::updateFilterColumn_0(QString string)
{
  strFilter_0.clear();
  strFilter_0.append(string);
  setFilterKeyColumn(0);
 
  invalidateFilter();
}
 
« Последнее редактирование: Август 30, 2016, 11:37 от demaker » Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


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

Сделал так , Спасибо Old
Код
C++ (Qt)
DataBaseFilterModel::DataBaseFilterModel(QObject *parent) :
   QSortFilterProxyModel(parent)
{
   strFilter_1.clear();
}
 
DataBaseFilterModel::~DataBaseFilterModel()
{
}
 
QVariant DataBaseFilterModel::data(const QModelIndex &index, int role) const
{
   if(role == Qt::BackgroundColorRole){
       const QModelIndex src = mapToSource(index);        
       if( !strFilter_1.isEmpty() && filterAcceptsRow(src.row(),QModelIndex()))
           return QBrush("yellow");
   }
 
   return QSortFilterProxyModel::data(index,role);
}
 
bool DataBaseFilterModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
   int column = filterKeyColumn();
   if(column == 1){
       if(strFilter_1.isEmpty()){
           return true;
       }
       else{
           QModelIndex index = sourceModel()->index(source_row,column,source_parent);
           QVariant value = sourceModel()->data(index,Qt::DisplayRole);
           if(value.isValid()){
               int date = value.toInt();
               int filter = strFilter_1.toInt();
               return date == filter;
           }
       }
    }
 
   return QSortFilterProxyModel::filterAcceptsRow(source_row,source_parent);
}
 
void DataBaseFilterModel::updateFilterColumn_1(QString string)
{
   strFilter_1.clear();
   strFilter_1.append(string);    
   setFilterKeyColumn(1);
   invalidateFilter();
}
 
Записан
demaker
Птица говорун
*****
Offline Offline

Сообщений: 962


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

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


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