Russian Qt Forum

Qt => Model-View (MV) => Тема начата: FireSnake от Март 08, 2011, 17:00



Название: TableView выделить измененные значения
Отправлено: FireSnake от Март 08, 2011, 17:00
Здравствуйте, недавно начал изучать QT, стал вникать в MV и столкнулся со следующей задачей:
есть модель и TableView
Код:
...
model = new QSqlTableModel;
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
model->setTable("test");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
ui->tableView->setModel(model);
...
Мне необходимо выделить те значения, которые пользователь изменил, например жирным шрифтом, ну или иконку рядом поставить. Насколько я понял для этого нужно создать свой делегат? Я создал свой делегат на основе QItemDelegate и установил его для TableView. По идее реализация выделения должна находиться в переопределенном методе setModelData
Код:
void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const{
    QSpinBox* spinBox= static_cast<QSpinBox*>(editor);
    spinBox->interpretText();
    int value = spinBox->value();
    model->setData(index, value, Qt::EditRole);
    //Здесь должен быть код
    model->setData(index, QFont("Console", 32, 10), Qt::FontRole);//Не работает
}
может я совсем не в ту сторону думаю? подскажите пожалуйста


Название: Re: TableView выделить измененные значения
Отправлено: FireSnake от Март 08, 2011, 17:22
Если вместо QSqlTableModel использовать QStandartItemModel - то указанная строчка работает


Название: Re: TableView выделить измененные значения
Отправлено: Kolobok от Март 08, 2011, 17:59
QSqlTableModel игнорирует все роли кроме Qt::DisplayRole | Qt::EditRole.


Название: Re: TableView выделить измененные значения
Отправлено: FireSnake от Март 08, 2011, 18:23
И какой выход можно использовать? Делать свою модель или использовать прокси модель?
Как бы мне это реализовать более правильно) не хочется говнокодить ^_^


Название: Re: TableView выделить измененные значения
Отправлено: Пантер от Март 09, 2011, 10:11
Пиши свою модель.


Название: Re: TableView выделить измененные значения
Отправлено: FireSnake от Март 09, 2011, 18:53
Тогда вопрос такой, если я создам модель на основе QSqlTableModel что мне нужно сделать чтобы как раз обойти вот то ограничение что она игнорирует все роли кроме дисплей и эдит


Название: Re: TableView выделить измененные значения
Отправлено: alexman от Март 09, 2011, 22:39
Храни в модели кеш и переопределяй методы setData, data.


Название: Re: TableView выделить измененные значения
Отправлено: FireSnake от Март 09, 2011, 23:35
На счет кэша не догнал как реализовать. Примерчиком не подкормите?  ???


Название: Re: TableView выделить измененные значения
Отправлено: alexman от Март 09, 2011, 23:51
http://www.prog.org.ru/topic_12792_0.html (http://www.prog.org.ru/topic_12792_0.html)


Название: Re: TableView выделить измененные значения
Отправлено: lit-uriy от Март 10, 2011, 21:18
к стати, представление умеет показывать изменения на заголовках строк, в случае если фиксация данных происходит вручную (manual submit). Надо покопать исходник, чтобы понять, как оно это делает.


Название: Re: TableView выделить измененные значения
Отправлено: qt_user от Ноябрь 22, 2011, 10:48
Вот посмотрел примеры делегата в Spin Box Delegate Example и возник вопрос чисто теоретического характера:
зачем делают вот так:
Код:
spinBox->interpretText();
int value = spinBox->value();
, а не просто:
Код:
int value = spinBox->value();