Как использовать <QAbstractTableModel> |
Здравствуйте, гость ( Вход | Регистрация )
Как использовать <QAbstractTableModel> |
Lonely_hermit |
3.4.2010, 10:10
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 3.4.2010 Пользователь №: 1590 Спасибо сказали: 0 раз(а) Репутация: 0 |
Дорогие форумчане.
Как задавать в *.h и *.cpp модель при помощи класса <QAbstractTableModel>, с учётом того, что она обращается к "таблице" в базе POSTGre' и служит для передачи данных в TableView? |
|
|
Litkevich Yuriy |
3.4.2010, 10:29
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
QAbstractTableModel этот класс не предназначен для создания экземпляров (объектов), а только для наследования. Об этом говорит слово "Абстрактный" в названии этого класса.Примеры по работе с Модель/представление есть в поставке Qt: Программирование Модель/Представление Cached Table Example Table Model Example |
|
|
Lonely_hermit |
3.4.2010, 14:04
Сообщение
#3
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 3.4.2010 Пользователь №: 1590 Спасибо сказали: 0 раз(а) Репутация: 0 |
Я не совсем корректно выразился.
У меня есть физическая модель QSqlQueryModel *mod; Есть также QSortFilterProxyModel pm, по которой происходит сортировка строк в порядке возрастания. Индексы эту pm НЕ видят, они видят только mod. Как сделать так, чтобы таблица в mod была отсортирована как и pm? |
|
|
Litkevich Yuriy |
3.4.2010, 15:23
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Lonely_hermit |
3.4.2010, 19:54
Сообщение
#5
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 3.4.2010 Пользователь №: 1590 Спасибо сказали: 0 раз(а) Репутация: 0 |
Заранее прошу прощения за русский. Вся программа делалась в Linuxe.
*.h Parent Form. ___________________________________________ Раскрывающийся текст
*.cpp Parent Form. ___________________________________________ Раскрывающийся текст
Причина редактирования: Используй тег code
|
|
|
Litkevich Yuriy |
4.4.2010, 4:26
Сообщение
#6
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
суть этого кода в двух словах, пожалуйста.
|
|
|
Lonely_hermit |
4.4.2010, 7:54
Сообщение
#7
|
Студент Группа: Новичок Сообщений: 10 Регистрация: 3.4.2010 Пользователь №: 1590 Спасибо сказали: 0 раз(а) Репутация: 0 |
суть этого кода в двух словах, пожалуйста. У нас есть база данных в удалённом доступе. В ней таблица. На форму она выводится объектом QTableView myTable. Чтобы вывести данные на таблицу, мы задали объект QSqlQueryModel mod. Данные на myTable выскакивают неотсортированные. Запрос mod->setQuery("select * from "bla-bla-bla" order by \"id\" asc",gb) не поможет, поскольку происходит вызов вторичной формы, в поля которой мы вносим данные, которые в свою очередь сохраняются в Postgre таблице. Содержимое таблицы меняется по сотне раз на дню. Отслеживаем отправку груза, доставку и т.п. Вызов вторичной формы происходит из первичной по кнопкам "Изменить, "Удалить". Выборка данных происходит по индексу, который пишется в record по mod. Для того, чтобы отсортировать данные в myTable, создаётся QSortFilterProxyModel pm, которую потом и видит таблица r_ui->myTable->setModel(pm); recordы же выбираются по модели mod, которую на myTable не видно. Поэтому, когда я выбираю в таблице надпись с "id" 5 (по модели pm) во вторичной форме в поле "id" возникает левая надпись 47 (по модели mod, которую не видно). |
|
|
Litkevich Yuriy |
4.4.2010, 9:16
Сообщение
#8
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Положим, что в данной ситуации оправдано использование использование модели запроса (QSqlQueryModel), вместо табличной (QSqlTableModel).
В общем при использовании моделей-посредников нужно решать такие задачи: 1) Обновление модели-посредника после изменения данных в исходной модели. 2) Отображение (перевод) индексов одной модели в индексы другой модели Отправные точки для решения: 1) - QSortFilterProxyModel::setDynamicSortFilter(bool) - Пример 2) Цитата The QSortFilterProxyModel acts as a wrapper for the original model. If you need to convert source QModelIndexes to sorted/filtered model indexes or vice versa, use mapToSource(), mapFromSource(), mapSelectionToSource(), and mapSelectionFromSource().
|
|
|
Текстовая версия | Сейчас: 25.4.2024, 15:02 |