Qt, ComboBox и mapper проблема с индексом более 255

На профильных форумах спросил, пока никто не ответил, попробую спросить тут. Все-таки тут народ отзывчивей.

Собственно, есть БД SQLITE.

создаю маппинг:
  tableModel_tblMain = new QSqlRelationalTableModel(this);
  tableModel_tblMain->setTable("tblMain");
  tableModel_tblMain->setRelation(tblMain_clientid, QSqlRelation("tblClients", "id", "name"));
  tableModel_tblMain->setRelation(tblMain_operatorid, QSqlRelation("tblOperators", "id", "name"));
...

// создаю реляцию
  relationModelClientID = tableModel_tblMain->relationModel(tblMain_clientid);
  relationModelClientID->setSort(tblClients_name, Qt::AscendingOrder);
  relationModelClientID->select();

...
// так как клиентов много, делаю перебор: (иначе отображает только 255 штук)
  relationModelClientID->select();
  while(relationModelClientID->canFetchMore())
    relationModelClientID->fetchMore();

...

// создаю маппинг
  mapper = new QDataWidgetMapper(this);
  mapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
  mapper->setModel(tableModel_tblMain);
  mapper->setItemDelegate(new QSqlRelationalDelegate(this));
  mapper->addMapping(ui.CB_ClientSelect, tblMain_clientid);
...

// после редактированния делаю субмит
mapper->submit();

А теперь самое интересное: если в комбобоксе выбран индекс до 255 включительно, строка в таблицу отлично добавляется. Если индекс 256 и выше, то mapper->submit(); возвращает false.

0
fox4 - 17 Апрель, 2018 - 20:56
Изображение пользователя fox4.

https://ru.wikipedia.org/wiki/%D0%A6%D0%B5%D0%BB%D0%BE%D0%B5_(%D1%82%D0%B8%D0%BF_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85)
Надо как то посмотреть может ваш индекс в библиотеке Qt представлен как qint8

0
fox4 - 17 Апрель, 2018 - 21:01
Изображение пользователя fox4.

currentindex
Надо посмотреть может currentindex в ComboBox имеет тип qint8 ?

0
AlexMad - 17 Апрель, 2018 - 21:26

В ComboBox явно больше одного байта на индекс. Ибо выбирается и UserRole (индекс клиента) нормально видится.
И так ясно, что где-то размер индекса однобайтовый, скорее всего в маппере (QDataWidgetMapper), но где там это искать мне не совсем понятно.

0
AlexMad - 18 Апрель, 2018 - 09:15

А вообще с этим маппером творится что-то мистическое.
Я этот проект делал еще в 12-ом году, тогда все работало. Году в 16-ом была проблема с индексом, но в другом месте приложения, тогда на это просто забил.
Сейчас только чуть подправил бизнес-логику приложения и получил такой залет.
Два дня сидел в отладчике, ничего не нашел. Сегодня с утра решил повторить отладку - а оно все заработало. Без изменений кода!
И ведь очистку и пересборку проводил... Вобщем, оно заработало, значит, не надо его трогать :) Но, к сожалению придется - надо еще функциональность приложения поправить.

0
fox4 - 17 Апрель, 2018 - 22:28
Изображение пользователя fox4.

Вообще то это СПО я не знаю конкретно вашей конфигурации системы разработки думаю что у вас QtCreator вопрос только установлен из репов или онлайн инсталлятор использовали. В любом случае надо установить dev пакеты для библиотек Qt и linux (или вашей платформы) завязанной на ваш проект и пройтись отладчиком. Ничего лучше человеком пока вроде не предумано.

Отправить комментарий

CAPTCHA на основе изображений
Введите цифры