crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> 2 таблицы, реляционная модель и QComboBox
Rocky
  опции профиля:
сообщение 1.2.2011, 20:23
Сообщение #1


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Всем привет!

Вот столкнулся с определенными трудностями, и не понимаю как их преодолеть.. Есть 2 таблицы. Они связаны друг с другом через ключ. В 1-й таблице 2 столбца (ID, value), во 2-й - 3 (ID, foreign_ID, value). Данные из первой таблицы добавляю в 1-й QComboBox так:
    QSqlTableModel *pModel2 = new QSqlTableModel();
    pModel2->setTable("CUSTOMERS");
    pModel2->select();
    pModel2->sort(1, Qt::AscendingOrder);
    m_pCustomerCmb->setModel(pModel2);
    m_pCustomerCmb->setModelColumn(1);

2-й QComboBox для 2-й таблицы формирую так:
    QSqlRelationalTableModel *pModel3 = new QSqlRelationalTableModel();
    pModel3->setTable("CUSTOMERS_NAMES");
    pModel3->setRelation(1, QSqlRelation("CUSTOMERS", "CustomerID", "CustomerAddress"));
    pModel3->select();
    pModel3->sort(2, Qt::AscendingOrder);
    m_pCustomerNameCmb->setModel(pModel3);
    m_pCustomerNameCmb->setModelColumn(2);


А как мне поставить фильтр на 2-й QComboBox чтобы в нем отображались записи только для тех пар (ID, value), которые являюются текущими в 1-м комбобоксе? Еслиб это были таблицы QTableView - тут все просто. 1-я колонка это и есть внутренние ID таблиц. А как мне узнать, какой ID 1-й таблицы выбран на данный момент в 1-м комбобоксе?

----
UPD
Потому что в 1-й комбобокс выводится только 2-й столбец 1-й таблицы - т.е. values.... И как в таком случае узнать, что за ID 1-й таблицы соответствует выводимый (QComboBox::currentText(...)) текст в этом 1-м комбобоксе...

Спасибо!

Сообщение отредактировал Rocky - 1.2.2011, 22:07
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
abc
  опции профиля:
сообщение 1.2.2011, 22:26
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 221
Регистрация: 16.12.2010
Из: СПб
Пользователь №: 2272

Спасибо сказали: 26 раз(а)




Репутация:   4  


узнать id можно так:

QModelIndex index=comboBox->model()->index(comboBox->currentIndex(),0);
QString id=comboBox->model()->data(index).toString();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xls
  опции профиля:
сообщение 1.2.2011, 22:51
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 6.9.2010
Пользователь №: 2013

Спасибо сказали: 7 раз(а)




Репутация:   2  


Цитата(Rocky @ 1.2.2011, 20:23) *
А как мне поставить фильтр на 2-й QComboBox чтобы в нем отображались записи только для тех пар (ID, value), которые являюются текущими в 1-м комбобоксе? Еслиб это были таблицы QTableView - тут все просто. 1-я колонка это и есть внутренние ID таблиц. А как мне узнать, какой ID 1-й таблицы выбран на данный момент в 1-м комбобоксе?

Попробуй setFilterKeyColumn и setFilterFixedString у QSortFilterProxyModel.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Rocky
  опции профиля:
сообщение 2.2.2011, 8:34
Сообщение #4


Старейший участник
****

Группа: Участник
Сообщений: 530
Регистрация: 22.12.2008
Из: Санкт-Петербург
Пользователь №: 463

Спасибо сказали: 22 раз(а)




Репутация:   7  


Пока сделал как abc написал - работает =)

xls, а можно плиз по-подробнее, до меня не доходит... Как я должен задавать эту QSortFilterProxyModel? Ведь у комбобокса уже есть модель - QSqlRelationalTableModel...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
xls
  опции профиля:
сообщение 2.2.2011, 13:38
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 44
Регистрация: 6.9.2010
Пользователь №: 2013

Спасибо сказали: 7 раз(а)




Репутация:   2  


Цитата(Rocky @ 2.2.2011, 8:34) *
xls, а можно плиз по-подробнее, до меня не доходит... Как я должен задавать эту QSortFilterProxyModel? Ведь у комбобокса уже есть модель - QSqlRelationalTableModel...

QSortFilterProxyModel задается как модель для 2-го комбо - при этом исходная QSqlRelationalTableModel устанавливается как исходная для прокси-модели через setSourceModel. Это позволяет не перечитывать вторую модель, а просто фильтровать однажды считанные данные...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 15.9.2019, 16:51