Russian Qt Forum

Qt => Model-View (MV) => Тема начата: unkeep от Апрель 12, 2013, 12:26



Название: TreeView изменение цвета заданной ячейки
Отправлено: unkeep от Апрель 12, 2013, 12:26
как изменить цвет фона ячейки  или цвет текста в ней  зная её индекс?


Название: Re: TreeView изменение цвета заданной ячейки
Отправлено: Bepec от Апрель 12, 2013, 12:47
Отдать из модели DataRole. Или же делегат втыкнуть.


Название: Re: TreeView изменение цвета заданной ячейки
Отправлено: unkeep от Апрель 12, 2013, 12:52
а если прямо из модели это делать? у меня в модели есть обход дерева, где я получаю эти индексы. Может лучше не хранить их а сразу менять цвет в модели? можно так?(как?)


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


Название: Re: TreeView изменение цвета заданной ячейки
Отправлено: Bepec от Апрель 12, 2013, 13:58
Код:
if (role == Qt::DecorationRole)
    return QColor(Qt::red);


Название: Re: TreeView изменение цвета заданной ячейки
Отправлено: unkeep от Апрель 15, 2013, 10:07
что то не совсем догоняю.
Код
C++ (Qt)
sourceModel()->setData(itemIndex,QColor(Qt::red),Qt::DecorationRole);
так?
а что потом?


Название: Re: TreeView изменение цвета заданной ячейки
Отправлено: unkeep от Апрель 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);
}

ничего не выделяет. что не так?


Название: Re: TreeView изменение цвета заданной ячейки
Отправлено: Bepec от Апрель 22, 2013, 10:07
Кхм. Незнай. Слишком мало инфы.

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

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

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



Название: Re: TreeView изменение цвета заданной ячейки
Отправлено: unkeep от Апрель 22, 2013, 10:26
Цитировать
Переопределены ли у вас data и setData в основной модели?
нет
Цитировать
Что возвращает sourceModel()->data в приведённом вам куске прокси модели?
invalid
Цитировать
Что возвращает setData (true или false)?
false...

видимо надо переопределять ещё data и setData? каким образом?


Название: Re: TreeView изменение цвета заданной ячейки
Отправлено: Bepec от Апрель 22, 2013, 10:54
1) неправильно задаёте setData;

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

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

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

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

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

В общем вариантов куча.