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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Разорвать связь между QComboBox и его моделью  (Прочитано 3093 раз)
radislav72
Гость
« : Сентябрь 10, 2010, 09:28 »

Помогите пожалуйста с таким вроде примитивным заданием:
- (а) есть комбобокс, и дле него установлена QSqlQueryModel
- (б) нужно в него, убрав все старые полученные из модели значения (но не удаляя самой модели- она еще нужна), добавить несколько фиксированных значений.

Вопрос, как правильно пункт (б) сделать? Я так понимаю, надо как-то разорвать связь между комбобоксом и назначенной ему моделью, после чего просто добавить новые строчки вызовом addItem(). Но как разорвать?

Если вызвать clear(), то очищается кроме комбобокса сама модель, а она нужна для другого комбобокса.

Если просто создать комбобокс, и не назначая ему модели добавить несколько елементов, то все ОК. Но стоит ему назначить модель, как после етого уже не получается самому формировать список комбобокса.
Записан
asvil
Гость
« Ответ #1 : Сентябрь 10, 2010, 09:43 »

Не в том направлении мыслите.
Когда в делает addItem, то combobox оперирует у себя внутренней моделью.
Для того чтобы выполнить б) нужно сделать combobox::setModel(0); а после combobox::addItems();
Если вы хотите чтобы у вас была установлена sql модель и + какие-то еще значения одновременно, нужно подкручивать sql запрос в стиле
Например, для postgresql.
Код:
select id from sometable
union select VALUES (-1), (-2), (-3);
Записан
radislav72
Гость
« Ответ #2 : Сентябрь 10, 2010, 09:55 »

Если вы хотите чтобы у вас была установлена sql модель и + какие-то еще значения одновременно

Не, все дело в том что специальной sql модели действительно не нужно. Нужно просто добавть несколько фиксированных значений

Для того чтобы выполнить б) нужно сделать combobox::setModel(0); а после combobox::addItems();

setModel(0) нельзя делать- так пишет справка : "model must not be 0"
Записан
radislav72
Гость
« Ответ #3 : Сентябрь 10, 2010, 12:17 »

Я как бы вышел из положения путем создания вручную новой модели и наложения ее на комбобокс:
Код:
    modMemTypes = new QStandardItemModel();
    modMemTypes->appendRow(new QStandardItem(tr("строка 1")));
    modMemTypes->appendRow(new QStandardItem(tr("строка 2")));

    ...

    ui->cbp2->setModel(modMemTypes);
    ui->cbp2->setModelColumn(0);
    ui->cbp2->setCurrentIndex(0);

Но неужели нет способа "разорвать" связь с предыдущей моделью, без наложения новой?
Записан
radislav72
Гость
« Ответ #4 : Сентябрь 13, 2010, 07:08 »

Никто не отвечает, наверно, вопрос глупый Улыбающийся

Хоть и решил я его для себя, подскажите пожалуйста кто-то ссылку (или укажите направление), чтобы разобраться с устройством комбобокса, и как правильней реализовать то что я спросил в первом посте.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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