Название: QSqlRelationalTableModel не находит значение ключа. Отправлено: PavelVX от Май 23, 2011, 10:22 немного переделанный пример из интернета:
QSqlRelationalTableModel * albumsRelation = new QSqlRelationalTableModel(this); albumsRelation->setTable("public.zakaz"); albumsRelation->setRelation(1, QSqlRelation("public.polu1", "\"KODPL\"", "\"NAIM\"")); ComboBoxDelegateCaption * comboClient = new ComboBoxDelegateCaption(this); /*мой делегат*/ Когда я пытаюсь редактировать таблицу, то значения меняются не всегда. Нашел отладчиком и место проблемы: ( QSqlRelationalTableModel.cpp) bool QSqlRelationalTableModel::setData(const QModelIndex &index, const QVariant &value, int role) { Q_D(QSqlRelationalTableModel); if ( role == Qt::EditRole && index.column() > 0 && index.column() < d->relations.count() && d->relations.value(index.column()).isValid()) { QRelation &relation = d->relations[index.column()]; if (!relation.isDictionaryInitialized()) relation.populateDictionary(); if (!relation.dictionary.contains(value.toString())) return false; } return QSqlTableModel::setData(index, value, role); } метод relation.dictionary.contains(value.toString()) не находит значение в QHash<QString, QVariant> dictionary;//maps keys to display values! :( Начал переделывать этот фаил, но изменения не компилируются. Всвязи с этим вопрос: что делать? Как мне посмотреть содержимое QHash или как перекомпилировть этот файлик, что бы он принял отладочные изменения? Название: Re: QSqlRelationalTableModel не находит значение ключа. Отправлено: pokidoff от Май 23, 2011, 12:40 Перекомпиль проект в папке %QT_HOME_DIR%\qt\src\sql\sql.pro но незабудь забэкапиться. Ты получишь новую дллку QSql4.dll
Название: Re: QSqlRelationalTableModel не находит значение ключа. Отправлено: PavelVX от Май 24, 2011, 11:12 спасибо! Получилось как надо.
Но всплыл новый глюк: в QHash попадает всего 256 записей! (model->rowCount()) Хотя там явно больше. Это системное ограничение, или глюк? :( Поэтому и часть значений не попадает и не обрабатывается. Посоветуйте, как понять, где именно в данном случае искать косяк? :( сам спросил, сам и отвечаю, ответ нашел в инете. Может кому-нибудь это поможет в дальнейшем не тратить столько времени и сил :(. Select в QSqlTableModel запрашивает только первые 256 записей. Чтобы полностью заполнить модель надо делать так: QSqlRelationalTableModel.cpp model->select(); while(model->canFetchMore()) model->fetchMore(); //без этого она берет только первые 256 записей, <censored!> Получается, что нужно немного подправить класс и перекомпилить его. Тогда все нормально работает. И вообще, зачем они этот гемор придумали?? Вопрос к знатокам: я под линем так же смогу сделать нужные изменения в классе моделей и перекомпилить библиотеку и пользоваться подправленной моделью? Правильно ли это? Или есть более правильный метод? Название: Re: QSqlRelationalTableModel не находит значение ключа. Отправлено: pokidoff от Май 25, 2011, 11:24 Цитировать И вообще, зачем они этот гемор придумали?? Тут явная забота о пользователе - чтобы он не состарился, пока модель заполняется выборкой в несколько миллионов записей.Опыт показывает, что пользователь не будет работать с огромной выборкой, достаточно увидеть 256 записей или уточнить запрос. Название: Re: QSqlRelationalTableModel не находит значение ключа. Отправлено: like-nix от Май 27, 2011, 11:13 >Вопрос к знатокам: я под линем так же смогу сделать нужные изменения в классе моделей и перекомпилить библиотеку и пользоваться подправленной моделью? Правильно ли это? Или есть более правильный метод?
Насколько я помню это запрещает LGPLv3. |