Russian Qt Forum

Qt => Model-View (MV) => Тема начата: AlekseyK от Сентябрь 19, 2015, 21:08



Название: Использование QComboBox совместно с QSqlQueryModel
Отправлено: AlekseyK от Сентябрь 19, 2015, 21:08
Для ускорения работы QComboBox с очень большим набором данных хочу попробовать использовать QSqlQueryModel вместо QStandardItemModel. Но текстовые данные в QComboBox мне нужно привязать к ID, который сейчас хранится в itemData(rowIndex, Qt::UserRole). Если в запросе для QSqlQueryModel есть 2 колонки: ID и Text и для QComboBox определено setModelColumn(1), т.е. Text.

Как правильно наследовать или переопределить QSqlQueryModel, чтобы combobox->itemData(rowIndex, Qt::UserRole) содержал ID? Кто с таким сталкивался или знает ссылку на источник? Если переопределить QVariant QSqlQueryModel::data ( const QModelIndex & item, int role = Qt::DisplayRole ) таким образом:

Код
C++ (Qt)
QVariant MySqlModel::data(const QModelIndex &index, int role) const
{
   if(role == Qt::UserRole && index.column() == 1)
        return QSqlQueryModel::data(this->index(index.row(), 0), Qt::DisplayRole);
 
   return QSqlQueryModel::data(index, role);
}

будет ли это работать, т.е. будет combobox->itemData(rowIndex, Qt::UserRole) содержать ID? Или надо исследовать исходники Qt?


Название: Re: Использование QComboBox совместно с QSqlQueryModel
Отправлено: AlekseyK от Сентябрь 20, 2015, 01:26
Да, судя по коду QComboBox должно работать:

Код
C++ (Qt)
QVariant QComboBox::itemData(int index, int role) const
{
   Q_D(const QComboBox);
   QModelIndex mi = d->model->index(index, d->modelColumn, d->root);
   return d->model->data(mi, role);
}