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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: TreeView изменение цвета заданной ячейки  (Прочитано 5613 раз)
unkeep
Гость
« : Апрель 12, 2013, 12:26 »

как изменить цвет фона ячейки  или цвет текста в ней  зная её индекс?
Записан
Bepec
Гость
« Ответ #1 : Апрель 12, 2013, 12:47 »

Отдать из модели DataRole. Или же делегат втыкнуть.
Записан
unkeep
Гость
« Ответ #2 : Апрель 12, 2013, 12:52 »

а если прямо из модели это делать? у меня в модели есть обход дерева, где я получаю эти индексы. Может лучше не хранить их а сразу менять цвет в модели? можно так?(как?)
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #3 : Апрель 12, 2013, 13:07 »

а если прямо из модели это делать? у меня в модели есть обход дерева, где я получаю эти индексы. Может лучше не хранить их а сразу менять цвет в модели? можно так?(как?)
Тебе же Bepec уже сказал как. Вот так
Код
C++ (Qt)
QVariant QAbstractItemModel::data ( const QModelIndex & index, int role = Qt::DisplayRole ) const [pure virtual]
Записан

Qt 5.11/4.8.7 (X11/Win)
Bepec
Гость
« Ответ #4 : Апрель 12, 2013, 13:58 »

Код:
if (role == Qt::DecorationRole)
    return QColor(Qt::red);
Записан
unkeep
Гость
« Ответ #5 : Апрель 15, 2013, 10:07 »

что то не совсем догоняю.
Код
C++ (Qt)
sourceModel()->setData(itemIndex,QColor(Qt::red),Qt::DecorationRole);
так?
а что потом?
Записан
unkeep
Гость
« Ответ #6 : Апрель 22, 2013, 10:04 »

сделал так:
в прокси модели в переопределённом методе  filterAcceptsRow где нужно добавил:
Код
C++ (Qt)
sourceModel()->setData(itemIndex,Qt::yellow,Qt::BackgroundColorRole);

в прокси модели переопределил метод data
Код
C++ (Qt)
QVariant ViewModel::data(const QModelIndex &idx, int role) const{
   switch(role){
       case Qt::BackgroundColorRole:
       return sourceModel()->data(mapToSource(idx),Qt::BackgroundColorRole);
 
   }
   return  QSortFilterProxyModel::data(idx, role);
}

ничего не выделяет. что не так?
Записан
Bepec
Гость
« Ответ #7 : Апрель 22, 2013, 10:07 »

Кхм. Незнай. Слишком мало инфы.

Переопределены ли у вас data и setData в основной модели?

Что возвращает sourceModel()->data в приведённом вам куске прокси модели?

Что возвращает setData (true или false)?

Записан
unkeep
Гость
« Ответ #8 : Апрель 22, 2013, 10:26 »

Цитировать
Переопределены ли у вас data и setData в основной модели?
нет
Цитировать
Что возвращает sourceModel()->data в приведённом вам куске прокси модели?
invalid
Цитировать
Что возвращает setData (true или false)?
false...

видимо надо переопределять ещё data и setData? каким образом?
Записан
Bepec
Гость
« Ответ #9 : Апрель 22, 2013, 10:54 »

1) неправильно задаёте setData;

2)  неправильно преобразовываются индексы.

PS а так бы тестовый проект был бы лучше.

update: добрался до дома, более подробный ответ далее.

Я точно не помню, но какая то модель используется только для чтения (из sql моделей.). Возможно это реляционная.

Возможно вы неправильно задаёте цвет, точнее задаёте неправильный индекс. Попробуйте вызвать у индекса isValid ().

В общем вариантов куча.
« Последнее редактирование: Апрель 22, 2013, 11:36 от Bepec » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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