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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: сортировка по столбцу в QTableView  (Прочитано 15341 раз)
Natalie
Гость
« : Декабрь 26, 2006, 14:14 »

Есть QTableView, но использует модель MyModel.

Необходимо произвести сортировку таблицы по какому-нибудь стробцу, но так, чтобы порядок элементов в моделе не изменился (то есть, чтобы изменился порядок отображения элементов).

Стандартная сортировка sortByColumn(int i) не работает.
Нашла здесь на форуме, что можно использовать QSqlQueryModel, но у меня итак уже используется модель MyModel. А в QSqlQueryModel не такого: queryModel->setSourceModel(myModel);

Думала, будет работать функци rowMoved(row, oldIndex, newIndex), но ничего не происходит Грустный

Помогите, пожалуйста, как мне добиться желаемого результата!
Записан
Alexandr Az
Гость
« Ответ #1 : Декабрь 26, 2006, 15:35 »

Если ответит в шутку - то никак.
Если ответить в серьёз - то будет тоже, что и в шутку Улыбающийся

Да ладно, перестаньте, что нам, помяти жалко!
if (Памяти не жалко Улыбающийся )
{
   Если название модели опрадывает её название (т.е она действительно Ваша), то прийдётся тупо копировать модель и её данные и ту сортировать. Если нужно сохранить взаимосвязь между моделями, тогда прийдётся ввести ещё один итем в модель, скажем отвечающий за номер строк. QSqlQueryModel может изменить конечно ситуацию. Для этого мы создаём базу данных в памяти (отличнейшим образом подходит SqlLite) и из неё делаем выборку. Итого получаем - один источник данных - sqllite и куча моделей, отсортированых как вам надо. Вариант решать Вам, мыж не знаем что у вас за данные и какая такая дикая модель....
Кстати, насчёт памяти - второй вариант будет менее требователен к ресурсам, т.к. мы не будем хранить все данные выборки из базы данных, а только тех, что просматриваем (с ужасом, я надеюсь они реализовали двунаправленые курсоры в sqllite!!!!)
}

Эка сказать, не шутка чай, девушка кутешница. А звучит!
Записан
itan
Гость
« Ответ #2 : Декабрь 26, 2006, 17:20 »

Вообще-то для таких целей используется QSortFilterProxyModel
Код:

QTreeView *treeView = new QTreeView;
MyItemModel *sourceModel = new MyItemModel(this);
QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this);
proxyModel->setSourceModel(sourceModel);
treeView->setModel(proxyModel);
Записан
Natalie
Гость
« Ответ #3 : Декабрь 27, 2006, 03:19 »

itan, проблема в том, что я использую не QTreeView, а QTableView. А с QTableView QSortFilterProxyModel не работает, во всяком случае, функция lessThan(const QModelIndex & left, const QModelIndex & right) не вызывается Грустный
Записан
Tonal
Гость
« Ответ #4 : Декабрь 27, 2006, 07:55 »

А сортировку по столбцу собственно вызывал - proxyModel->sort(col)?
Записан
itan
Гость
« Ответ #5 : Декабрь 27, 2006, 09:48 »

Цитата: "Natalie"
itan, проблема в том, что я использую не QTreeView, а QTableView. А с QTableView QSortFilterProxyModel не работает, во всяком случае, функция lessThan(const QModelIndex & left, const QModelIndex & right) не вызывается Грустный

Какая версия QT? В 4.2 есть void QTableView::setSortingEnabled ( bool enable ), надо установить ее в true.
Записан
Natalie
Гость
« Ответ #6 : Декабрь 27, 2006, 12:35 »

У меня версия 4.1.4, и там нет такой функции Грустный
Записан
itan
Гость
« Ответ #7 : Декабрь 27, 2006, 14:26 »

Цитата: "Natalie"
У меня версия 4.1.4, и там нет такой функции Грустный

Вот, посмотри, здесь похожая проблема: http://www.qtcentre.org/forum/f-qt-programming-2/t-qsortfilterproxymodellessthan-method-doesnt-work-4270.html
Записан
Natalie
Гость
« Ответ #8 : Декабрь 28, 2006, 13:45 »

Большое спасибо тебе, itan!!!!

Все заработало!! Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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