Название: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Пытон от Февраль 10, 2013, 11:29 Код
Смотрим на строку self.mapper.addMapping(self.gorod_, windowmain.model1.fieldIndex("gorod")) Как указать мапперу, что в поле gorod таблицы table1 нужно записать значение поля text из таблицы spisok1? Чего он мне туда индекс записывает? Я не использую реляционную модель! Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Пытон от Февраль 10, 2013, 16:07 Ну тут же явно нужно как-то указать, что комбобокс должен возвратить значение из своего списка, а не его индекс. Ну как это сделать-то?
Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Пытон от Февраль 24, 2013, 11:42 Ненавижу QT. Ничего непонятно и никто помочь не может.
Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Bepec от Февраль 24, 2013, 13:15 А ты поменьше такими словами кидайся :D
Связка Qt + python не очень популярна на данный момент. Я не могу сказать практически ничего, изза незнания синтаксиса и способа испльзования pyQt, но на мой взгляд у вас всё усложнено. Особенно передасты :D Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Пытон от Февраль 24, 2013, 17:58 Связка Qt + C++ тоже не распространена?
Мне и помощь нарисованная в коде для С++ подойдёт. Уж как-нибудь я её перенесу в питон (алгоритм-то весь тот же), тем более, что на питоне писать проще из-за отсутствия лишних точек-запятучек-закорючек-скобочек-стрелочек и предварительных объявлений типов данных. Если мой пример на питоне не понятен, то объясню то, что мне надо просто словами: Имеется таблица (НЕ связанная ни с какой другой, первичных ключей не имеет). Имеется модель для этой таблицы. Имеется маппер, который работает с этой моделью. Нужно: чтобы этот чёртов маппер брал данные из второй таблицы и сохранял их в первую. И чтобы сохранял он не индекс записи, не первичный ключ, а именно текстовые данные из второй таблицы. Т.е. в первой таблице должен храниться не ключ, а одно из слов из второй таблицы. Первая таблица: fam im ot gorod хрюкин хрюка хрюкович бердск - в этом поле храним ТЕКСТ, никакой не ключ! вторая таблица: gorod бердск - вот прямо это значение и записываем в поле gorod первой таблицы братск салатск урюпинск Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Bepec от Февраль 24, 2013, 19:48 Попытаюсь посмотреть завтра, если будет свободное время на работе ( :D ).
Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: panAlexey от Февраль 25, 2013, 11:28 Ненавижу QT. Ничего непонятно и никто помочь не может. Ты не на Qt лабаешь, а на купитоне.Qt без прослоек весьма съедобна. Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Bepec от Февраль 25, 2013, 17:47 Времени на работе не було к сожалению. Понял в принципе ваш код, попытаюсь воссоздать на плюсах.
Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Пытон от Февраль 25, 2013, 18:49 Ненавижу QT. Ничего непонятно и никто помочь не может. Ты не на Qt лабаешь, а на купитоне.Qt без прослоек весьма съедобна. Я в курсе на чём я лабаю. С прослойками, без прослоек ли, а виджеты и объекты Qt одни и те же вне зависимости от прослоек. Что писал бы я на С++, что пишу сейчас на питоне - одинаково непонятно как заставить маппер делать то, что мне нужно. Или от прослоек у виджетов и объектов Qt вдруг изменяются свойства, методы, сигналы, слоты и т.д? Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: panAlexey от Февраль 25, 2013, 18:58 Я в курсе на чём я лабаю. С прослойками, без прослоек ли, а виджеты и объекты Qt одни и те же вне зависимости от прослоек. Не одни и те же а бинденные. Т.е. с налетиком...Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Bepec от Февраль 25, 2013, 19:03 update:
У вас уникальное стечение обстоятельств, что хоть что-то работает :) У вас комбобокс изменяется при хождении по записям? У меня лично нет (хотя мб это фишка пикуте). Стандартное значение комбобокса - индекс. Вот его он туда и записывает. Чтобы записывал текст, необходимо написать вот так Код: mapper_->addMapping(ui.comboBox, 2, "currentText"); Код: self.mapper.addMapping(self.gorod_, windowmain.model1.fieldIndex("gorod"), "currentText") Единственно что, у меня при таком раскладе не отображается текст при хождении через маппер (пропертя только для чтения, он не может её установить). Но, думаю, это вполне обходится, если отнаследоваться от комбобокса и чуточку изменить его проперти (сомнения есть, что это возможно, не пробовал). PS Искреннее спасибо вам за тему. Этот компонент мной был не охвачен, но ОЧЕНЬ ОЧЕНЬ нужен в ближайшее время :D Теперь во всеоружии :D Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Пытон от Февраль 26, 2013, 18:54 Ткните мне, пожалуйста, нерадивому пальцем, и хде вы нашли этот самый "currentText"?
В qt ассистенте я такого не видел. Где это можно увидеть, чтобы я не лазил по форумам и сайтам? currentText - это, получается, свойство самого комбобокса. Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Пытон от Февраль 26, 2013, 18:57 update: У вас уникальное стечение обстоятельств, что хоть что-то работает :) PS Искреннее спасибо вам за тему. Этот компонент мной был не охвачен, но ОЧЕНЬ ОЧЕНЬ нужен в ближайшее время :D Теперь во всеоружии :D Бесконечно рад, что смог доставить вам удовольствие в возможности поупражняться в сарказме. Это было целью всей моей жизни до сего момента. Теперь не знаю, что и делать, как дальше жить... ;) П.С. За потраченное на меня время конечно же спасибо. Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Пытон от Февраль 26, 2013, 19:05 update: На PyQt можно написать практически также как в вашем варианте для C++. Просто я не использовал конструктор форм, и вместо прямого указания индекса поля, велел PyQt определять индекс поля по его имени.так Код: mapper_->addMapping(ui.comboBox, 2, "currentText"); Код: self.mapper.addMapping(self.gorod_, windowmain.model1.fieldIndex("gorod"), "currentText") П.С. self'ы меня тоже раздражают, но ещё больше раздражает синтаксис С++ с его фигурными скобками, стрелочками, двойными двоеточиями и командами типа: типобъекта имяобъекта = новый типобъекта (указано ж заразе один раз, какой тип у объекта, нафига после new снова его указывать?) Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Пытон от Февраль 26, 2013, 19:17 А можно вопрос не по теме?
Почему для model = SqlRelationalTableModel не срабатывает model.insertRecord(Record), где Record = model.record()? При этом в БД появляется новая запись (это видно через сторонний просмотрщик SQLite и даже новое значение первичного ключа генерируется), заполненная null, но эта запись не отображается во view связанной с model! Кто-нибудь вообще использует SqlRelationalTableModel или все дружно используют для работы с БД исключительно SQL-запросы? Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Bepec от Февраль 26, 2013, 19:58 Пишу из
Я лично с SQL столкнулся недавно. Про реляционную модель ничего сказать не могу. Собственно сарказма в моём спасибке не было, искренняя благодарность. А currentText - это указывается пропертя виджета, об этом написано в документации по QDataWidgetMapper'у (у него метод перегруженный такой). А само свойство я вытянул из исходников комбобокса в приступе святого рвения помощи близким. Собственно вот доказательства. Ассистент QDataWidgetMapper: Цитировать void QDataWidgetMapper::addMapping ( QWidget * widget, int section, const QByteArray & propertyName ) Ассистент QComboBox: Цитировать currentText : const QString This property holds the text of the current item. By default, for an empty combo box or a combo box in which no current item is set, this property contains an empty string. Access functions: QString currentText () const PS цитаты сам только что читал впервые. Как то странно, но у меня получилось добиться только с помощью исходников + ассист подсказывает. Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Пытон от Февраль 28, 2013, 18:13 При помощи добавленного "currentText", этот самый текст замечательно сохраняется в таблицу БД.
Вот только теперь, при открытии окна с этим комбобоксом, в комбобоксе всегда выбрана первая запись. И чхать он хотел на то, что в строке модели совсем другой город был. Теперь каким-то макаром нужно указать мапперу, чтобы он отыскивал в своём источнике данных (таблица городов) текст соответствующий тексту из главной таблицы и делал его текущим Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Bepec от Февраль 28, 2013, 21:47 Я ж написал ) Что это можно обойти, если :
1) отнаследоваться от комбобокса и добавить ему свойство ) 2) плюнуть на виджетмаппер и написать собственную реакцию для комбобокса. PS правда я не представляю себе возможно ли в пикуте наследование и переопределение. PPS Осторожно! Простое решение! Есть возможность костыля быстрого. Это создание двух комбобоксов. Один будет получать данные без currentText индекс. Тем самым получать корректное значение записи в базе. И если его скрыть, но связать сигналом с вторым комбобоксом, который будет связан c currentText, тогда у тебя получится связка, получающая корректные значения и записывающая текст в базу. Данная импровизация построена на логике и здравом смысле, но не гарантирует 100% решаемости проблемы. Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Пытон от Март 02, 2013, 06:20 Всё в "пикуте" возможно, только я толком не соображаю каким макаром мне всё это делать. Какое свойство добавлять, от чего оно должно зависеть, как в нём должно появляться требуемое значение...
Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Bepec от Март 02, 2013, 09:08 *Троль вкл* Быгыгы *Троль выкл*
У виджетов есть свойства = QProperty. Они определены в H файле виджета. У них указывается их тип, а так же функции для чтения и изменения пропертей. Вот у комбобокса есть функция для чтения. А вот для записи нет :) Правда я ни разу не пытался заменить/добавить проперти в стандартные виджеты. Потому и не могу сказать, разрешено это иль нет :) Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Пытон от Март 02, 2013, 10:08 Тролль он Люблю фокспро - язык для работы с собственной БД. В нём всё для этого реализовано, и всё так просто. Ненавижу все остальные языки в которых всё то, что есть в фокспро "искаропки" нужно долго и нудно реализовывать самому. Тролль офф Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Bepec от Март 02, 2013, 16:29 Это называется узко ориентированными языками :)
С++ позволяет сделать всё и немножечко больше. А Qt лишь библиотека С++. PS напишите свой маппер для работы с БД. Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Пытон от Март 03, 2013, 17:56 Это называется узко ориентированными языками :) А именно это мне и нужно. Название: Re: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи. Отправлено: Bepec от Март 03, 2013, 21:01 Так напишите под себя ) С++ это как раз и позволяет сделать :D
|