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

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

Страниц: [1] 2 3   Вниз
  Печать  
Автор Тема: QSqlRelationalTableModel и QComboBox  (Прочитано 20795 раз)
mwChief
Гость
« : Март 14, 2010, 15:55 »

Есть база следующего вида:



Гружу table1 в  QSqlRelationalTableModel и назначаю ее tableView. Устанавливаю отношение между таблицами чтоб в table2_id показывался не id а имя поля которое ему соотвествует во второй таблице.

Код
C++ (Qt)
model->setRelation(model->fieldIndex("table2_id"),
QSqlRelation("table2","table2_id","table2_text"));
                        
Мне нужно отображать поле table2_id в comboBox, чтоб значение в comboBox всегда соотвествовало строке выделенной в tableView. И при смене значения в comboBox это изменение сохранялось в выделенной в tableView строке.
С отображением проблем не возникло - просто назначил comboBox модель:

Код
C++ (Qt)
comboBox->setModel(model);
comboBox->setModelColumn(model->fieldIndex("table2_id"));
   
Но вот как сохранить изменения при выборе другого значения в comboBox незнаю.

Форма выглядит примерно вот так:




Пример не совсем реальный, я просто попытался выделить из программы ту часть с которой у меня возникли трудности.
« Последнее редактирование: Март 14, 2010, 20:13 от mwChief » Записан
VAP
Гость
« Ответ #1 : Март 14, 2010, 20:49 »

Думаю поможет QDataWidgetMapper...
Записан
mwChief
Гость
« Ответ #2 : Март 14, 2010, 21:00 »

Я тоже так думал, но все мои поиски привели к многочисленным жалобам (в том числе в багтрекере у тролей) на то что QDataWidgetMapper с QCombobox не работает.
Например вот:
http://bugreports.qt.nokia.com/browse/QTBUG-158?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel

может я неправильно понял, даже был бы рад если это так
Записан
VAP
Гость
« Ответ #3 : Март 14, 2010, 23:43 »

Судя по приведенной ссылке бага касается версии 4.2.0. Лично я юзал на 4.5.0 так проблем нет.
Записан
mwChief
Гость
« Ответ #4 : Март 14, 2010, 23:46 »

Что именно и как вы использовали? Можна кусочек кода?

Там не указано в какой версии это исправлено, так что бага вполне еще может быть актуальной.
Записан
VAP
Гость
« Ответ #5 : Март 14, 2010, 23:55 »

Загляни в Ассистент, там есть примеры кода по теме
Записан
mwChief
Гость
« Ответ #6 : Март 15, 2010, 00:07 »

Давайте определимся.
Вы написали
Цитировать
Судя по приведенной ссылке бага касается версии 4.2.0. Лично я юзал на 4.5.0 так проблем нет.
Вы использовали QDataWidgetMapper с QComboBox? Если да, то покажите пожалйста кусочек кода с этим использованием. Если по каким-то причинам вы не можете или не хотите показывать код, так и скажите.

Цитировать
Загляни в Ассистент, там есть примеры кода по теме
Воистину универсальный ответ который можна постить в любую тему форума. О каких примерах кода вы говорите, снова таки об использовании QDataWidgetMapper и QComboBox? Если вы точно знаете что это есть, будьте добры, подскажите как искать.
Записан
VAP
Гость
« Ответ #7 : Март 15, 2010, 21:51 »

Советую ознакомиться:
http://doc.trolltech.com/qq/qq21-datawidgetmapper.html#usingdelegatestoofferchoices
Записан
mwChief
Гость
« Ответ #8 : Март 16, 2010, 00:12 »

Спасибо, похоже это как раз то что нужно. Но я никак немогу заставить его работать.
Записан
mwChief
Гость
« Ответ #9 : Март 19, 2010, 00:04 »

Проблему решил
Записан
vpara
Гость
« Ответ #10 : Апрель 20, 2010, 18:35 »

У меня немного другая ситуация:
Table2 редактируется в диалоге в QTableView, QSqlRelationalTableModel ... но после закрытия диалога в главной форме не получяется обновить содержимое кобобоксов.  (скреен будет чуть позже)
Записан
Dr.Vlad
Гость
« Ответ #11 : Апрель 21, 2010, 01:49 »

QTableView имеет свойство устанавливать setCurrentIndex(index).
В тексте:

В строку добавляете значение из comboBox,

QString jj = dobavit->m_ui->comboBox->currentText().trimmed();

Производите поиск по строке на совпадение,

QSortFilterProxyModel proxy;
                proxy.setSourceModel(model());
                proxy.setFilterKeyColumn(0);
                proxy.setFilterRegExp("^"+ jj +"$");
                if (proxy.rowCount() != 0)
                {
                    QModelIndex indeX = proxy.mapToSource(proxy.index(0, 0, QModelIndex()));
                    m_ui->tableView->setCurrentIndex(indeX);
                }

Устанавливаете текущий индекс.
Для comboBox специально создаётся текущая модель с запросом.
« Последнее редактирование: Апрель 21, 2010, 01:52 от Dr.Vlad » Записан
vpara
Гость
« Ответ #12 : Апрель 21, 2010, 16:09 »

Признаю вопрос был неправильно задан Улыбающийся забыл сказать что кобобокс на QTableView и следовательно мне нужно обновить весь QTableView ... (Скрины ниже)
Я добавил новую линию в Table2 ... закрыл диалог ... перехожу на главную форуму (Table1) ... пытаюсь найти айтем TEST!!! ... его нету.

Заранее благодарен!
« Последнее редактирование: Апрель 21, 2010, 16:19 от vpara » Записан
Dr.Vlad
Гость
« Ответ #13 : Апрель 23, 2010, 18:27 »

А зачем Вам QComboBox на QTableView? Впервые вижу comboBox в таблице!
Помогу!
Записан
alexman
Гость
« Ответ #14 : Апрель 23, 2010, 20:44 »

А зачем Вам QComboBox на QTableView? Впервые вижу comboBox в таблице!
Помогу!
Нормальный способ для выбора одного элемента из множества!?
Записан
Страниц: [1] 2 3   Вверх
  Печать  
 
Перейти в:  


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