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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как привязать QCombobox к QSqlRelationalTableModel?  (Прочитано 4351 раз)
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 не хочет отображать.

Несколько раз сверялся с демо - всё вроде бы также настроенно. Подскажите, пожалуйста, в чём недосмотр?
Записан
cdsmika
Гость
« Ответ #1 : Октябрь 24, 2009, 23:01 »

Попробуй
mapper->addMapping(ui.CBAuthor, authorIdx, "currentIndex");
Вместо параметра currentIndex можно использовать любой другой параметр QComboBox.
« Последнее редактирование: Октябрь 25, 2009, 11:43 от cdsmika » Записан
ranet
Гость
« Ответ #2 : Ноябрь 03, 2009, 03:05 »

Попробуй
mapper->addMapping(ui.CBAuthor, authorIdx, "currentIndex");
Вместо параметра currentIndex можно использовать любой другой параметр QComboBox.
Судя по имени поля, к которому комбик привинчивается, поле - текстовое..  тогда так правильно:
Код:
...->addMapping(counters_ui.site_CB, 1, "currentText");
В отличие от LineEdit (там третий параметр не указывается), тут БЕЗ НЕГО нифига РАБОТАТЬ НЕ БУДЕТ. Хотя в книге  Ж. Бланшет синтаксис именно такой приведен, без третьего параметра. Синтаксис лучше смотреть в примерах к документации, потому как и версия QT уже другая, и очепятки бывают..
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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