Russian Qt Forum

Qt => Базы данных => Тема начата: UndeadDragon от Апрель 22, 2013, 01:01



Название: QSqlRelationalTableModel и выборка значений
Отправлено: UndeadDragon от Апрель 22, 2013, 01:01
Всем привет. В общем есть простая база на Sqlite (привожу интересующую нас ее часть):
(http://pastexen.com/i/Yk9KGB93.png)
И есть QSqlRelationTableModel, тобишь модель-интервью:
Теперь вопрос: вот к примеру открыл я через модель интервью таблицу StoringItems и выставил с помощью метода setRelation все взаимоотношения, как бы мне теперь сделать, чтобы при добавлении новой записи, и выборе какой-либо модели, тип ее выбирался автоматически, такой, какой указан в таблице Products?
Пример:
(http://pastexen.com/i/8aE6ESW2.png)
Если я выберу Intel Core i7, то тип останется Видеокарты. Что есмъ бред и приведет к потере целостности и все такое. Как бы мне реализовать такие взаимоотношения на уровне модели-интервью? Потому, что это понятно, как организовывать это на уровне запросов, но на этом, крайне удобном уровне, я не знаю как.

P.S. И еще вопрос, как бы сделать, чтобы поле дата выбиралось через календарик? А то другие поля в QSqlRelationTableModel нормально выбираются в зависимости от типа, а дату вручную вводи. А ведь и неправильное ввести могут, да и неудобно.

Заранее спасибо!


Название: Re: QSqlRelationTableModel и выборка значений
Отправлено: Bepec от Апрель 22, 2013, 06:49
2) Поставить надо делегат чтобы он открывал календарик и давал пользователю выбирать дату.

По первому вопросу не отвечу :P


Название: Re: QSqlRelationalTableModel и выборка значений
Отправлено: manarch от Апрель 23, 2013, 06:19
Создаешь свой делегат на базе QItemDelegate, переобъявляешь метод setModelData, в нем отлавливаешь изменение в колонке "model", вычисляешь по передаваемому значению тип и передаешь его для колонки "type". Будет что то похожее на:

 void  QMyItemDelegate::setModelData ( QWidget * editor, QAbstractItemModel * model, const QModelIndex & index ) const
{
       if(index.column()==1){ // 1 = model column
              QVariant typeValue = GetTypeForModel(index.data());
              model->setData(model->index(index.row(), 2), typeValue);  // 2 = type column
       }
       QItemDelegate::setModelData(editor, model, index);
}