Russian Qt Forum

Qt => Вопросы новичков => Тема начата: PavelVX от Сентябрь 30, 2011, 12:39



Название: Как пересобрать модель из исходников?
Отправлено: PavelVX от Сентябрь 30, 2011, 12:39
Возникла необходимость немного подправить QSqlRelationalTableModel(запрашивает только первые 256 значений, а надо все)
До этого стояла Qt 2010.05. В ней зашел в исходники. сделал необходимое изменение и собрал библиотеку заново.
Сейчас поставил QtSDK 4.7.4. Через Updater скачал исходники. В QtCreator открываю sql.pro. А в этот проект входит много того, что я не хотел бы пересобирать.
Ну ладно, входит так входит. Пытюсь собрать, а оно ругаться начинает:
..\sql\kernel\qsqlquery.cpp:51:38: error: private/qsqlnulldriver_p.h: No such file or directory
Посоветуйте, как же все таки пересобрать проект?
А что делать с models.pri я не знаю, и гугл не помогает :(


Название: Re: Как пересобрать модель из исходников?
Отправлено: Пантер от Сентябрь 30, 2011, 13:12
Читай и не занимайся ерундой (http://doc.qt.nokia.com/4.7/qabstractitemmodel.html#canFetchMore)


Название: Re: Как пересобрать модель из исходников?
Отправлено: shirushizo от Сентябрь 30, 2011, 14:17
Самое православное решение.
Код:
while(model->canFecthMore()) model->fetchMore(); 
А пытаться пересобирать из-за этого библиотеку или драйвера точно не нужно.
А если уж совсем заняться нечем: можно наследоваться и переопределить select().


Название: Re: Как пересобрать модель из исходников?
Отправлено: PavelVX от Октябрь 03, 2011, 08:15
Эхх, плохо я объяснил проблему.
Есть таблица с внешними ключами: zakaz (pk1, fk1, ...)
Есть таблица с названиями names (pk2, names, ... )
fk1 соединен с pk2.
    zakaz->setTable("zakaz");
    zakaz->setRelation(2, QSqlRelation("names", "pk2", "names"));
Вот теперь, при открытии этой таблицы внешние ключи заменятся на названи. Но если названий больше чем 256, то изменения будут невозможны, так как в QSqlRelationalTableModel.cpp не будет нужной QHash пары.
До этого я вставлял там while(model->canFecthMore()) model->fetchMore(); таким образом создавая все пары. И все редактировалось/вставлялось. сейчас не получается.
Как в данном случае обойтись без пересборки модели? Значений в таблице будет больше чем 256 всегда.



Название: Re: Как пересобрать модель из исходников?
Отправлено: shirushizo от Октябрь 03, 2011, 12:19
Код:
zakaz->setTable("zakaz");
zakaz->setRelation(2, QSqlRelation("names", "pk2", "names"));
/*...*/
QSqlTableModel *relmodel=zakaz->relationModel(2);
while(relmodel->canFetchMore()) relmodel->fecthMore();
И в связанной модели будут все записи. Единственное точно не вспомню, надо ли перед этим select() делать или нет.


Название: Re: Как пересобрать модель из исходников?
Отправлено: PavelVX от Октябрь 03, 2011, 13:30
спасибо, все заработало!