Здравствуйте, гость ( Вход | Регистрация )
|
Steklova Olga |
14.6.2013, 18:02
Сообщение
#1
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: 4
|
Здравствуйте
Понадобилось мне в QTableView отобразить записи таблицы БД, но отсортировать их не по одной колонке, как я раньше делала, а по нескольким одновременно. (Есть, например, в таблице поля A, B, C, D, F1, F2. Надо отсортировать записи по возрастанию значений поля A, записи с одинаковым А надо еще отсортировать по возрастанию B, с одинаковыми A и B - по возрастанию C, с одинаковыми A, B и C - по возрастанию D.) В книге Земскова есть пример multisort для QTableWidget. Там оператор, щелкая по заголовкам столбцов в том порядке, в каком хочет, выбирает, по каким колонкам надо отсортировать таблицу и как сортировать: по возрастанию или убыванию. Мне в программе пока не требуется, чтобы оператор выбирал, по каким полям сортировать таблицу. Мне надо жестко задать сортировку таблицы по возрастанию полей A, B, C, D. Как это сделать для QTableView? Не хочется использовать QTableWidget, у меня везде в программе используются QTableView, для которых установлены модели. А у QTableWidget нет метода setModel, есть только setItem. У меня, пока что, только одно предложение, как это можно сделать, но, по-моему, не самое удачное: Поля A, B, C, D у меня целые, при этом я знаю, сколько цифр максимально могут содержать эти поля (A - max 4 цифры, B - 3, C - 1, D - 1). Если сделать вычисляемое поле F_AAAABBBCD и записать туда A*10000 + B*100 + C*10 + D, то отсортировав таблицу по возрастанию этого поля, получим сортировку по полям A, B, C, D. Есть другие предложения? |
|
|
|
![]() |
|
Steklova Olga |
17.6.2013, 11:23
Сообщение
#2
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 198 Регистрация: 27.9.2011 Из: Санкт-Петербург Пользователь №: 2912 Спасибо сказали: 5 раз(а) Репутация: 4
|
Цитата(Litkevich Yuriy @ 15.6.2013, 14:36) Link См. Модели-посредники -> Пользовательские модели сортировки эта ссылка не работает, вот точнее LinkНо я еще не разобралась, как использовать QSortFilterProxyModel. Цитата(Litkevich Yuriy @ 15.6.2013, 14:36) Link если первичная модель выбирает данные из БД, то нужно делать от неё наследника, т.к. БД возвращает не все данные (их может быть слишком много), а выдаёт их порциями. извините, ничего не понялаВ наследнике реализовать: - либо запрос с сортировкой - либо добавить собственную функцию для задания полей сортировки, например: setOrderField(QStringList), и при вызове select() у модели использовать эти поля. Предлагаю другой вариант. Если не использовать QSortFilterProxyModel, то, наверное, вот что можно сделать. Я использую модель MyModel, унаследованную от QSqlTableModel, переопределяю в ней методы flags, data, setData. Эта модель позволяет указывать setSort только для одного поля таблицы. Можно унаследовать модель MyModel не от QSqlTableModel, а от QSqlQueryModel. Такая модель позволит указать в setQuery сортировку по нескольким полям одновременно:
|
|
|
|
Steklova Olga QTableView сортировка по нескольким колонкам одновременно и пример chap14 multisort из книги Земскова "Qt4 на примерах" 14.6.2013, 18:02
Litkevich Yuriy См. Модели-посредники -> Пользовательские модел... 15.6.2013, 14:36
Litkevich Yuriy Цитата(Steklova Olga @ 17.6.2013, 13:23) ... 17.6.2013, 19:05
Steklova Olga Цитата(Litkevich Yuriy @ 15.6.2013, 14:36... 18.6.2013, 11:32
Litkevich Yuriy d->db - это просто БД (второй аргумент конструк... 18.6.2013, 11:42
Steklova Olga Так я правильно поняла, что Вы
Цитата(Steklova Ol... 18.6.2013, 12:24
Litkevich Yuriy Цитата(Steklova Olga @ 18.6.2013, 14:24) ... 18.6.2013, 18:50![]() ![]() ![]() |
|
Текстовая версия | Сейчас: 13.12.2025, 15:58 |