我正在使用QStyledItemDelegate
为QTreeView
中的项目设置样式。
我的树视图的根部没有装饰。它只是一个简单的树,其关系类似于下面的那个:
ColorBook1
Color1
Color2
ColorBook2
Color3
父母和孩子的样式不同,父母的选择也被禁用。
我想自定义子节点中的选择行为,以便子项周围的选择矩形覆盖整个行而不是文本子项。
当前行为:
所需行为:
有没有办法使用QStyledItemDelegate
像这样扩展选择矩形?我在adjusting
的{{1}}参数中尝试rect
QStyleOptionViewItem
。但是这会将子节点文本移动到左侧。我想将文本节点保持在同一位置,但只有选择矩形必须调整到左侧。就像在绘制方法中绘制文本和像素图一样,有没有办法绘制选择矩形(使用默认的选择矩形颜色)?
我的StyledItemDelegate的paint方法如下:
我在QStyledItemDelegate :: paint方法中使用以下代码:
QStyledItemDelegate::paint
答案 0 :(得分:2)
你可以自己画画。使用option.palette.brush(QPalette::Highlight)
获取突出显示颜色。
在这个片段中,我只是手动绘制空白区域。我也改变了颜色,但你不必这样做。
void StyleDel::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if(option.state.testFlag(QStyle::State_Selected))
{
QStyleOptionViewItem newOption = option;
newOption.state = option.state & (~QStyle::State_HasFocus);
QBrush brush = option.palette.brush(QPalette::Highlight);
brush.setColor(QColor(150,0,0,100));
newOption.palette.setBrush(QPalette::Highlight, brush);
QRect s_rect = newOption.rect; //we use this rect to define the blank area
s_rect.setLeft(0); // starts from 0
s_rect.setRight(newOption.rect.left()); //ends where the default rect starts
painter->fillRect(s_rect, newOption.palette.brush(QPalette::Highlight));
QStyledItemDelegate::paint(painter, newOption, index);
return;
}
QStyledItemDelegate::paint(painter, option, index);
}