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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Использование QComboBox совместно с QSqlQueryModel  (Прочитано 2674 раз)
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?
« Последнее редактирование: Сентябрь 20, 2015, 02:28 от AlekseyK » Записан
AlekseyK
Гость
« Ответ #1 : Сентябрь 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);
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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