Russian Qt Forum
Ноябрь 23, 2024, 17:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: QComboBox + mapper сохраняет в таблицу индекс записи вместо значения из записи.  (Прочитано 12403 раз)
Bepec
Гость
« Ответ #15 : Февраль 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 цитаты сам только что читал впервые. Как то странно, но у меня получилось добиться только с помощью исходников + ассист подсказывает.
Записан
Пытон
Гость
« Ответ #16 : Февраль 28, 2013, 18:13 »

При помощи добавленного "currentText", этот самый текст замечательно сохраняется в таблицу БД.
Вот только теперь, при открытии окна с этим комбобоксом, в комбобоксе всегда выбрана первая запись. И чхать он хотел на то, что в строке модели совсем другой город был.

Теперь каким-то макаром нужно указать мапперу, чтобы он отыскивал в своём источнике данных (таблица городов) текст соответствующий тексту из главной таблицы и делал его текущим
Записан
Bepec
Гость
« Ответ #17 : Февраль 28, 2013, 21:47 »

Я ж написал ) Что это можно обойти, если :
1) отнаследоваться от комбобокса и добавить ему свойство )
2) плюнуть на виджетмаппер и написать собственную реакцию для комбобокса.

PS правда я не представляю себе возможно ли в пикуте наследование и переопределение.

PPS Осторожно! Простое решение!
Есть возможность костыля быстрого. Это создание двух комбобоксов. Один будет получать данные без currentText индекс. Тем самым получать корректное значение записи в базе. И если его скрыть, но связать сигналом с вторым комбобоксом, который будет связан c currentText, тогда у тебя получится связка, получающая корректные значения и записывающая текст в базу.
Данная импровизация построена на логике и здравом смысле, но не гарантирует 100% решаемости проблемы.
« Последнее редактирование: Март 01, 2013, 07:51 от Bepec » Записан
Пытон
Гость
« Ответ #18 : Март 02, 2013, 06:20 »

Всё в "пикуте" возможно, только я толком не соображаю каким макаром мне всё это делать. Какое свойство добавлять, от чего оно должно зависеть, как в нём должно появляться требуемое значение...
Записан
Bepec
Гость
« Ответ #19 : Март 02, 2013, 09:08 »

*Троль вкл* Быгыгы *Троль выкл*

У виджетов есть свойства = QProperty.
Они определены в H файле виджета.
У них указывается их тип, а так же функции для чтения и изменения пропертей.
Вот у комбобокса есть функция для чтения. А вот для записи нет Улыбающийся

Правда я ни разу не пытался заменить/добавить проперти в стандартные виджеты. Потому и не могу сказать, разрешено это иль нет Улыбающийся
Записан
Пытон
Гость
« Ответ #20 : Март 02, 2013, 10:08 »


Тролль он
Люблю фокспро - язык для работы с собственной БД. В нём всё для этого реализовано, и всё так просто. Ненавижу все остальные языки в которых всё то, что есть в фокспро "искаропки" нужно долго и нудно реализовывать самому.
Тролль офф
Записан
Bepec
Гость
« Ответ #21 : Март 02, 2013, 16:29 »

Это называется узко ориентированными языками Улыбающийся

С++ позволяет сделать всё и немножечко больше. А Qt лишь библиотека С++.

PS напишите свой маппер для работы с БД.
Записан
Пытон
Гость
« Ответ #22 : Март 03, 2013, 17:56 »

Это называется узко ориентированными языками Улыбающийся

А именно это мне и нужно.
Записан
Bepec
Гость
« Ответ #23 : Март 03, 2013, 21:01 »

Так напишите под себя ) С++ это как раз и позволяет сделать Веселый
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.095 секунд. Запросов: 21.