crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> QAbstractItemModel setRowHidden
FakeMoNEy
  опции профиля:
сообщение 13.12.2012, 19:21
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 27.11.2012
Пользователь №: 3612

Спасибо сказали: 0 раз(а)




Репутация:   0  


Здравствуйте, я наследуюсь от QAbstractItemModel заполняю большую таблицу (QTableView2млн строк показывает их мнгновенно) и мне нужно выборочно скрывать показывать строки вот так



я использую SetRowHidden но это очень медленно, просто показать строки показывает мгновенно а если скрывать то минут 5-10 ждать приходиться, может есть какие то варианты?
fiterAcceptsRow не понял как это решить.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 13.12.2012, 21:01
Сообщение #2


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


Только через фильтр.

Можно просто через setFilterRegExp ( const QRegExp & regExp ) задав перед этим setFilterKeyColumn ( int column )

или наследуемся от QSortFilterProxyModel, предопределяем функцию filterAcceptsRow и в ней пишем нужное условие:
bool SortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
    QVariant currData = sourceModel()->index(source_row, column, source_parent).data();
    return (currData == "1");
}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FakeMoNEy
  опции профиля:
сообщение 17.12.2012, 21:28
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 7
Регистрация: 27.11.2012
Пользователь №: 3612

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата(RazrFalcon @ 13.12.2012, 22:01) *
Только через фильтр.

Можно просто через setFilterRegExp ( const QRegExp & regExp ) задав перед этим setFilterKeyColumn ( int column )

или наследуемся от QSortFilterProxyModel, предопределяем функцию filterAcceptsRow и в ней пишем нужное условие:
bool SortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const
{
    QVariant currData = sourceModel()->index(source_row, column, source_parent).data();
    return (currData == "1");
}

А когда вызываеться fiterAcceptsRow? Я так понял она все строки перебирает, а когда вызывается?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 18.12.2012, 13:03
Сообщение #4


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

Спасибо сказали: 64 раз(а)




Репутация:   212  


fiterAcceptsRow вызывает сама модель, обычно после setFilterRegExp() и подобных
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.12.2012, 18:57
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(FakeMoNEy @ 13.12.2012, 21:21) *
просто показать строки показывает мгновенно а если скрывать то минут 5-10 ждать приходиться, может есть какие то варианты?
запрещай перерисовку виджета (setUpdatesEnabled())
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.11.2024, 1:01