问题:
- 我有
QTreeView
对象,还有一个QStandardItemModel
作为模型来查看小部件; - 对于某些项目,我使用
setData
方法设置数据以使用参数拆分它们; - 所以我需要为项目绘制不同的背景像素图
QStandardItem
,其中包含图标和一些文本数据; - 并且不想重绘所有项目对象,我的意思是图标和文本。只是改变背景。
首先,我在想:
Qt Designer
我可以为具有 2 个不同背景图片的对象设置 CSS 样式表,但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 );
}
所以我被困住了...