QStandartItemModel + setRelation, Использование стандартной модели вместо таблицы из базы данных |
Здравствуйте, гость ( Вход | Регистрация )
QStandartItemModel + setRelation, Использование стандартной модели вместо таблицы из базы данных |
mishabard |
8.7.2011, 0:24
Сообщение
#1
|
Студент Группа: Участник Сообщений: 31 Регистрация: 13.6.2011 Из: Киев Пользователь №: 2741 Спасибо сказали: 0 раз(а) Репутация: 0 |
Суть следующая:
Есть модель и связанныя с ней таблица model->setRelation(kassaModel->fieldIndex("idpay"),QSqlRelation("pay","id","name")); ... Есть связанный виджет который в диалоговом окне меняет занчение в таблице ... QSqlTableModel *paymodel = model->relationModel(model->fieldIndex("idpay")); QComboBox * pCombo->setModel(paymodel); pCombo->setModelColumn(paymodel->fieldIndex("name")); .... mapper->addMapping(pCombo, model->fieldIndex("name")); .... Все работает, все замечательно!!! НО! Оказалось, что есть довольно много справочников, которые состоят из 2 или 3 значений или строк: Например: "T" - "ДА" "F" - "НЕТ" или "R" - "Красный" "B" - "Черный" "W" - "Белый" и т.п. В базе данных хранятся только ключи и все они CHAR(1). Логику и структуру поменять не получится, приходится приспосабливаться. ВОПРОС??? Можно ли в model->setRelation(kassaModel->fieldIndex("idpay"),QSqlRelation("pay","id","name")); Подставить модель не из базы данных. Созданную в программе. например QStandartItemModel или что- то еще проще, потому как все справочники - это (ключ - название). Наверно так как я написал -нельзя, но может есть какой то другой подход, использовать справочники "мелкие" не из базы данных, чтоб не нагружать сеть и не перегружать запросы. |
|
|
Litkevich Yuriy |
8.7.2011, 6:52
Сообщение
#2
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
можно свои делегаты сделать, чтобы каждый отображал пользователю нужную информацию вместо значения в ячейке
П.С. вообще для БД не рекомендуется строить много коротких справочников, лучше один длинный. |
|
|
mishabard |
9.7.2011, 22:30
Сообщение
#3
|
Студент Группа: Участник Сообщений: 31 Регистрация: 13.6.2011 Из: Киев Пользователь №: 2741 Спасибо сказали: 0 раз(а) Репутация: 0 |
можно свои делегаты сделать, чтобы каждый отображал пользователю нужную информацию вместо значения в ячейке я так и делаю. Использую или делегат или обробатываю QSqlRelationalTableModel::data можно свои делегаты сделать, чтобы каждый отображал пользователю нужную информацию вместо значения в ячейке я так и делаю. Использую или делегат или обробатываю QSqlRelationalTableModel::data Я может не првильно выразился. У меня изменения в базе происходят не через TableView, а через диалоговые окна, в которых стоят связанные делегаты. И если есть справочник, который не находится в базе, а заложен в программе, а таких не мало. То приходится чать полей обновлять через Маперы, а часть руками через Record, писать под каждое поле обработчик. Вот вопрос можно ли как-то в релятиционные поля добовлять модели не из базы данных. Сижу копаюсь второй день пока, пришла на мысль идея наследовать QSqlRelation. И использовать ту же конструкцию model->setRelation(kassaModel->fieldIndex("idpay"),QSqlRelation("pay","id","name"));но таблица "pay" - это какая то модель локальная созданная в программе Как думаете я на правильном пути? Может была уже у кого-то такая задача? Или все делается проще и я просто еще об этом не догадываюсь? |
|
|
Litkevich Yuriy |
9.7.2011, 22:54
Сообщение
#4
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Сижу копаюсь второй день пока, пришла на мысль идея наследовать QSqlRelation. И использовать ту же конструкцию видимо так и придётся делать. по большому счёту работа с Модель/представление + БД у тролей реализована на начальном этапе и никакого развития в этом направлении нет. А если ещё учесть некоторые новости относительно Qt 5 Цитата QtSql: то выбранный тобою путь - видимо единственный.
Требуются сопровождающие (Maintainers) |
|
|
mishabard |
9.7.2011, 23:34
Сообщение
#5
|
Студент Группа: Участник Сообщений: 31 Регистрация: 13.6.2011 Из: Киев Пользователь №: 2741 Спасибо сказали: 0 раз(а) Репутация: 0 |
Знаний пока не хватает((( но все равно попробую разобраться.
Спасибо! |
|
|
Текстовая версия | Сейчас: 25.4.2024, 15:50 |