Проблема:
- У меня есть объект
QTreeView
и модельQStandardItemModel
для просмотра виджета; - Для некоторых элементов я установил данные с помощью метода
setData
, чтобы разделить их с помощью параметра; - Поэтому мне нужно нарисовать другой фон pixmap для
QStandardItem
элементов, которые содержат значки и некоторые текстовые данные; - И не перерисовывать все объекты элементов, я имею в виду значок и текст. Просто смените фон.
Сначала я подумал, что:
- Я мог бы установить таблицы стилей CSS в
Qt Designer
для объекта с двумя разными фоновыми изображениями, НОQStandardItem
нет методаsetProperty
...
Пример:
QTreeView#treeView::item[ROLE="AAA"],
QTreeView#treeView::branch[ROLE="AAA"]
{
height: 25px;
border: none;
color: #564f5b;
background-image: url(:/backgrounds/images/row1.png);
background-position: top left;
}
QTreeView#treeView::item[ROLE="BBB"],
QTreeView#treeView::branch[ROLE="BBB"]
{
height: 25px;
border: none;
color: #564f5b;
background-image: url(:/backgrounds/images/row2.png);
background-position: top left;
}
- затем я создал свой собственный делегат, унаследованный от класса
QStyledItemDelegate
, и переопределил методpaint
, НО я не могу просто изменить фон, потому что кодQStyledItemDelegate::paint( painter, opt, index );
заменит мойdrawPixmap
...
Пример:
QStyleOptionViewItemV4 opt = option; // Для обхода QTBUG-4310
opt.state &= ~QStyle::State_HasFocus; // Чтобы не рисовался прямоугольник фокуса
QStyledItemDelegate::paint( painter, opt, index );
// HERE I WANT TO CHANGE BACKGROUND (DEFAULT IS ALREADY SET IN DESIGNER WITH ABOVE CODE)
if( index.data( SORT_ROLE ).toBool() )
{
const QPixmap pixmap( ":/backgrounds/images/backgrounds/contractor_row__high_priority.png" );
painter->drawPixmap( option.rect, pixmap, pixmap.rect() );
QStyledItemDelegate::paint( painter, opt, index );
}
Так что я застрял...