Russian Qt Forum

Qt => Общие вопросы => Тема начата: frostyland от Октябрь 14, 2010, 15:04



Название: Не могу покрасить строки в дереве
Отправлено: frostyland от Октябрь 14, 2010, 15:04
Уже голову сломал.
Пихал QAbstractItemModel::setData(index, QColor(Qt::green), Qt::BackgroundRole); в момент добавления элемента,
нет эфекта.

index однозначно правильный, выделяется именно нужный элемент, значит и краситься должен он
Код
C++ (Qt)
 
m_selection->setCurrentIndex(index(node), QItemSelectionModel::ClearAndSelect);
m_pluginManager->setCurrent(item);
QAbstractItemModel::setData(index(node), QColor(Qt::green), Qt::BackgroundRole);
QAbstractItemModel::setData(index(node), QColor(Qt::red), Qt::BackgroundRole);
 

В ::data(...) const пихать  нельзя, метод константный.

Как покрасить строчки по определенному алгоритму????


Название: Re: Не могу покрасить строки в дереве
Отправлено: kibsoft от Октябрь 14, 2010, 15:38
Этим занимается делегат. Посмотри пример Star Delegate. Тебе надо переопределить метод paint, чтобы красить строки.


Название: Re: Не могу покрасить строки в дереве
Отправлено: Kolobok от Октябрь 14, 2010, 15:40
Цитировать
bool QAbstractItemModel::setData ( const QModelIndex & index, const QVariant & value, int role = Qt::EditRole ) [virtual]
Sets the role data for the item at index to value.
Returns true if successful; otherwise returns false.
The dataChanged() signal should be emitted if the data was successfully set.
The base class implementation returns false. This function and data() must be reimplemented for editable models.


Название: Re: Не могу покрасить строки в дереве
Отправлено: frostyland от Октябрь 15, 2010, 11:41
Этим занимается делегат. Посмотри пример Star Delegate. Тебе надо переопределить метод paint, чтобы красить строки.
Емае... а что, попроще то никак? Всего то строки покрасить.
Где-то на форуме я встречал, что можно при добавлении элемента назначить ему бекграунд и форграунд.


Название: Re: Не могу покрасить строки в дереве
Отправлено: Kolobok от Октябрь 15, 2010, 12:07
Если у тебя самописная модель, наследованная от QAbstractItemModel, то переопредели методы data() и setData(). Если используешь QStandardItemModel, то просто вызывай её методы, а не QAbstractItemModel.


Название: Re: Не могу покрасить строки в дереве
Отправлено: frostyland от Октябрь 15, 2010, 12:39
Вот это да! Не устаю удивляться моделям данных троллей.
Оказывается, из ::data можно покрасить итем вот таким оригинальным образом
Код
C++ (Qt)
QVariant PluginTreeModel::data(const QModelIndex &index, int role) const
{
switch (role)
{
case Qt::DisplayRole:
break;
case Qt::CheckStateRole:
break;
case Qt::ForegroundRole:
if(index.column()!=1)
return Qt::darkGray;
break;
case Qt::BackgroundRole:
if(index.column()==1)
return Qt::darkGreen;
break;
}
break;
}
return QVariant();
}
 

Оххх, изучать еще и изучать )))