Название: Как привязать QCombobox к QSqlRelationalTableModel?
Отправлено: 24pm от Январь 05, 2009, 04:08
Список в QComboBox создаётся, навигация по QTableView отображается в привязанных QTextEdit и QLineEdit, a в QComboBox - нет. Его значение всегда = 1 Код строил на основе Qt демо-программы Books: // Create the data model QSqlRelationalTableModel *srcModel; srcModel = new QSqlRelationalTableModel(ui.TVSources); srcModel->setEditStrategy(QSqlTableModel::OnManualSubmit); srcModel->setTable("sources");
// Remeber the indexes of the columns int authorIdx = srcModel->fieldIndex("author"); int author_shortIdx = srcModel->fieldIndex("author_short");
// Set the relations to the other database tables srcModel->setRelation(authorIdx, QSqlRelation("authors", "id", "name")); srcModel->setRelation(author_shortIdx, QSqlRelation("authors", "id", "name_short"));
// Populate the srcModel if (!srcModel->select()) { QMessageBox::critical(this, "Unable to use Database", "Error selecting from database: " + srcModel->lastError().text()); return; }
// Set the srcModel and hide some columns ui.TVSources->setModel(srcModel); ui.TVSources->setSelectionMode(QAbstractItemView::SingleSelection);
// Initialize the Author combo box ui.CBAuthor->setModel(srcModel->relationModel(authorIdx)); ui.CBAuthor->setModelColumn(srcModel->relationModel(authorIdx)->fieldIndex("name"));
// Connect widgets with database QDataWidgetMapper *mapper = new QDataWidgetMapper(this); mapper->setModel(srcModel); ... mapper->addMapping(ui.CBAuthor, authorIdx); //!!! не работает mapper->addMapping(ui.LEAuthorShort, author_shortIdx); // другое lookup поле из той же таблицы
connect(ui.TVSources->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), mapper, SLOT(setCurrentModelIndex(QModelIndex))); ui.TVSources->setCurrentIndex(srcModel->index(0, 0));
Если привязываю к этому полю вместо QComboBox QLineEdit, то привязка работает. т.е. код mapper->addMapping(ui.LEAuthorShort, authorIdx); Отображает в QLineEdit то, что QComboBox не хочет отображать. Несколько раз сверялся с демо - всё вроде бы также настроенно. Подскажите, пожалуйста, в чём недосмотр?
Название: Re: Как привязать QCombobox к QSqlRelationalTableModel?
Отправлено: cdsmika от Октябрь 24, 2009, 23:01
Попробуй mapper->addMapping(ui.CBAuthor, authorIdx, "currentIndex"); Вместо параметра currentIndex можно использовать любой другой параметр QComboBox.
Название: Re: Как привязать QCombobox к QSqlRelationalTableModel?
Отправлено: ranet от Ноябрь 03, 2009, 03:05
Попробуй mapper->addMapping(ui.CBAuthor, authorIdx, "currentIndex"); Вместо параметра currentIndex можно использовать любой другой параметр QComboBox.
Судя по имени поля, к которому комбик привинчивается, поле - текстовое.. тогда так правильно: ...->addMapping(counters_ui.site_CB, 1, "currentText");
В отличие от LineEdit (там третий параметр не указывается), тут БЕЗ НЕГО нифига РАБОТАТЬ НЕ БУДЕТ. Хотя в книге Ж. Бланшет синтаксис именно такой приведен, без третьего параметра. Синтаксис лучше смотреть в примерах к документации, потому как и версия QT уже другая, и очепятки бывают..
|