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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: TableView выделить измененные значения  (Прочитано 6539 раз)
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);//Не работает
}
может я совсем не в ту сторону думаю? подскажите пожалуйста
Записан
FireSnake
Гость
« Ответ #1 : Март 08, 2011, 17:22 »

Если вместо QSqlTableModel использовать QStandartItemModel - то указанная строчка работает
Записан
Kolobok
Гость
« Ответ #2 : Март 08, 2011, 17:59 »

QSqlTableModel игнорирует все роли кроме Qt::DisplayRole | Qt::EditRole.
Записан
FireSnake
Гость
« Ответ #3 : Март 08, 2011, 18:23 »

И какой выход можно использовать? Делать свою модель или использовать прокси модель?
Как бы мне это реализовать более правильно) не хочется говнокодить ^_^
« Последнее редактирование: Март 08, 2011, 18:25 от FireSnake » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Март 09, 2011, 10:11 »

Пиши свою модель.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
FireSnake
Гость
« Ответ #5 : Март 09, 2011, 18:53 »

Тогда вопрос такой, если я создам модель на основе QSqlTableModel что мне нужно сделать чтобы как раз обойти вот то ограничение что она игнорирует все роли кроме дисплей и эдит
Записан
alexman
Гость
« Ответ #6 : Март 09, 2011, 22:39 »

Храни в модели кеш и переопределяй методы setData, data.
Записан
FireSnake
Гость
« Ответ #7 : Март 09, 2011, 23:35 »

На счет кэша не догнал как реализовать. Примерчиком не подкормите?  Непонимающий
Записан
alexman
Гость
« Ответ #8 : Март 09, 2011, 23:51 »

http://www.prog.org.ru/topic_12792_0.html
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #9 : Март 10, 2011, 21:18 »

к стати, представление умеет показывать изменения на заголовках строк, в случае если фиксация данных происходит вручную (manual submit). Надо покопать исходник, чтобы понять, как оно это делает.
Записан

Юра.
qt_user
Гость
« Ответ #10 : Ноябрь 22, 2011, 10:48 »

Вот посмотрел примеры делегата в Spin Box Delegate Example и возник вопрос чисто теоретического характера:
зачем делают вот так:
Код:
spinBox->interpretText();
int value = spinBox->value();
, а не просто:
Код:
int value = spinBox->value();
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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