Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: radislav72 от Сентябрь 10, 2010, 09:28



Название: Разорвать связь между QComboBox и его моделью
Отправлено: radislav72 от Сентябрь 10, 2010, 09:28
Помогите пожалуйста с таким вроде примитивным заданием:
- (а) есть комбобокс, и дле него установлена QSqlQueryModel
- (б) нужно в него, убрав все старые полученные из модели значения (но не удаляя самой модели- она еще нужна), добавить несколько фиксированных значений.

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

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

Если просто создать комбобокс, и не назначая ему модели добавить несколько елементов, то все ОК. Но стоит ему назначить модель, как после етого уже не получается самому формировать список комбобокса.


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


Название: Re: Разорвать связь между QComboBox и его моделью
Отправлено: radislav72 от Сентябрь 10, 2010, 09:55
Если вы хотите чтобы у вас была установлена sql модель и + какие-то еще значения одновременно

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

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

setModel(0) нельзя делать- так пишет справка : "model must not be 0"


Название: Re: Разорвать связь между QComboBox и его моделью
Отправлено: radislav72 от Сентябрь 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);

Но неужели нет способа "разорвать" связь с предыдущей моделью, без наложения новой?


Название: Re: Разорвать связь между QComboBox и его моделью
Отправлено: radislav72 от Сентябрь 13, 2010, 07:08
Никто не отвечает, наверно, вопрос глупый :)

Хоть и решил я его для себя, подскажите пожалуйста кто-то ссылку (или укажите направление), чтобы разобраться с устройством комбобокса, и как правильней реализовать то что я спросил в первом посте.