Название: QSqlRelationalTableModel и QComboBox Отправлено: mwChief от Март 14, 2010, 15:55 Есть база следующего вида:
(http://lh4.ggpht.com/_bFkLbDSEg-g/S5wi58xQd5I/AAAAAAAAA_I/eKgiKq6BjYo/s800/tables.jpg) Гружу table1 в QSqlRelationalTableModel и назначаю ее tableView. Устанавливаю отношение между таблицами чтоб в table2_id показывался не id а имя поля которое ему соотвествует во второй таблице. Код
Мне нужно отображать поле table2_id в comboBox, чтоб значение в comboBox всегда соотвествовало строке выделенной в tableView. И при смене значения в comboBox это изменение сохранялось в выделенной в tableView строке. С отображением проблем не возникло - просто назначил comboBox модель: Код
Но вот как сохранить изменения при выборе другого значения в comboBox незнаю. Форма выглядит примерно вот так: (http://lh3.ggpht.com/_bFkLbDSEg-g/S5wimhbgUXI/AAAAAAAAA-s/2Qe4QsBv2Fg/s800/dialog.jpg) Пример не совсем реальный, я просто попытался выделить из программы ту часть с которой у меня возникли трудности. Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: VAP от Март 14, 2010, 20:49 Думаю поможет QDataWidgetMapper...
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: mwChief от Март 14, 2010, 21:00 Я тоже так думал, но все мои поиски привели к многочисленным жалобам (в том числе в багтрекере у тролей) на то что QDataWidgetMapper с QCombobox не работает.
Например вот: http://bugreports.qt.nokia.com/browse/QTBUG-158?page=com.atlassian.jira.plugin.system.issuetabpanels%3Aall-tabpanel может я неправильно понял, даже был бы рад если это так Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: VAP от Март 14, 2010, 23:43 Судя по приведенной ссылке бага касается версии 4.2.0. Лично я юзал на 4.5.0 так проблем нет.
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: mwChief от Март 14, 2010, 23:46 Что именно и как вы использовали? Можна кусочек кода?
Там не указано в какой версии это исправлено, так что бага вполне еще может быть актуальной. Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: VAP от Март 14, 2010, 23:55 Загляни в Ассистент, там есть примеры кода по теме
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: mwChief от Март 15, 2010, 00:07 Давайте определимся.
Вы написали Цитировать Судя по приведенной ссылке бага касается версии 4.2.0. Лично я юзал на 4.5.0 так проблем нет. Вы использовали QDataWidgetMapper с QComboBox? Если да, то покажите пожалйста кусочек кода с этим использованием. Если по каким-то причинам вы не можете или не хотите показывать код, так и скажите.Цитировать Загляни в Ассистент, там есть примеры кода по теме Воистину универсальный ответ который можна постить в любую тему форума. О каких примерах кода вы говорите, снова таки об использовании QDataWidgetMapper и QComboBox? Если вы точно знаете что это есть, будьте добры, подскажите как искать.Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: VAP от Март 15, 2010, 21:51 Советую ознакомиться:
http://doc.trolltech.com/qq/qq21-datawidgetmapper.html#usingdelegatestoofferchoices Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: mwChief от Март 16, 2010, 00:12 Спасибо, похоже это как раз то что нужно. Но я никак немогу заставить его работать.
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: mwChief от Март 19, 2010, 00:04 Проблему решил
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: vpara от Апрель 20, 2010, 18:35 У меня немного другая ситуация:
Table2 редактируется в диалоге в QTableView, QSqlRelationalTableModel ... но после закрытия диалога в главной форме не получяется обновить содержимое кобобоксов. (скреен будет чуть позже) Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: Dr.Vlad от Апрель 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 специально создаётся текущая модель с запросом. Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: vpara от Апрель 21, 2010, 16:09 Признаю вопрос был неправильно задан :) забыл сказать что кобобокс на QTableView и следовательно мне нужно обновить весь QTableView ... (Скрины ниже)
Я добавил новую линию в Table2 ... закрыл диалог ... перехожу на главную форуму (Table1) ... пытаюсь найти айтем TEST!!! ... его нету. Заранее благодарен! Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: Dr.Vlad от Апрель 23, 2010, 18:27 А зачем Вам QComboBox на QTableView? Впервые вижу comboBox в таблице!
Помогу! Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: alexman от Апрель 23, 2010, 20:44 А зачем Вам QComboBox на QTableView? Впервые вижу comboBox в таблице! Нормальный способ для выбора одного элемента из множества!?Помогу! Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: Dr.Vlad от Апрель 23, 2010, 23:26 Предположим, что это фантазия автора. Где он сами записи хранит? если в comboBox это одно, если в базе, то совсем другое.
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: alexman от Апрель 24, 2010, 07:08 Какая разница где хранит? Переопределяй QItemDelegate и показывай любые виджеты. Ну а данные для кобо блкса из модели берем!
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: vpara от Апрель 25, 2010, 22:15 Если итнересно я могу выложить пожект ... с кодом пере глазами думаю всем будет монятнее что и как задумано
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: vpara от Апрель 25, 2010, 22:17 Какая разница где хранит? Переопределяй QItemDelegate и показывай любые виджеты. Ну а данные для кобо блкса из модели берем! а как модель обновить? Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: alexman от Апрель 26, 2010, 07:53 Какая разница где хранит? Переопределяй QItemDelegate и показывай любые виджеты. Ну а данные для кобо блкса из модели берем! а как модель обновить?Код: bool QAbstractItemModel::setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole ) Код: void QAbstractItemModel::layoutChanged () Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: vpara от Апрель 26, 2010, 12:42 Понять что с QSqlRelationalTableModel у меня не выйдет обновить занченя? ... переделать в QSqlTableModel?
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: crossly от Апрель 26, 2010, 14:01 почему не выйдет?? submit().... select()
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: vpara от Апрель 26, 2010, 14:12 почему не выйдет?? submit().... select() Так я открываю диалог для редактирования ТАБЛИЦЫ2: Код: void FamilyBudget::openArticleForm() После того как я закончил работать с диалогом я закрываю и срабатывает updateLinesPanel(); Код: void FamilyBudget::updateLinesPanel() И все равно выбрать только что добавлене значения не могу ... Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: crossly от Апрель 26, 2010, 15:08 а если обновить ещё и связанную модель??
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: vpara от Апрель 26, 2010, 15:16 если я правильно понял я обновил так:
Код: void ArticleWindow::done(int result) срабатывает когда закрываю диалог ... но толку 0 Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: vpara от Апрель 26, 2010, 15:17 я на связи и всегда жду свежих идей ... если нужно могу прожек выложить!
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: crossly от Апрель 26, 2010, 16:44 а если добавить
Код: articleModel->relationModel(int column)->select(); Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: vpara от Апрель 26, 2010, 16:50 а если добавить Код: articleModel->relationModel(int column)->select(); УРААААААААААААААААААААААААА!!!!!!!!!!!!! получилось ... Огромное вам человеческое спасибо! :) только я сделал Код: linesModel->relationModel(2)->select(); Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: DrHaos от Октябрь 11, 2010, 23:35 У меня ситуация схожая, открываю для редактирования строку главной таблицы (все поля таблицы привязаны к виджетам на форме через QDataWidgetMapper) затем добавляю в связанную таблицу строку, в QComboBox изменения отображаются а в гланой таблице сохранить не могу, как обновить индексы?
Код: void MMalc::editAgreement() Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: crossly от Октябрь 12, 2010, 11:42 так же как указано выше...
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: DrHaos от Октябрь 12, 2010, 13:29 Да вот пробовал что то не получается. может подскажите в какое место воткнуть все это дело.
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: crossly от Октябрь 13, 2010, 14:48 после сабмита маперу...
Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: RVZ от Октябрь 20, 2010, 18:21 Всем здравия!!!
------------------------------------------------------ Тихий ужос что то с QComboBox одни проблемы ну ни как он не хочет у меня работать В общем в таблице есть поле с одним символом (вариантов значения всего 3 :"Н";"X";"Y") Делать связь с внешним ключом нет смысла 1байт всего поэтому варианты значений ввел с клавы по двойному клику на комбике в креаторе Код: .......... но вот если символ поменять то после SubmitAll() он в таблице не изменяется и в самом виджете становится как был ранее(то есть как в таблице) Что делать кто сталкивался подскажите ??? Название: Re: QSqlRelationalTableModel и QComboBox Отправлено: crossly от Октябрь 20, 2010, 22:59 ну вообще то relationaldelegate предназначен именно для связи двух таблиц... если вам нужен просто выбор значения сделайте свой делегат..
|