在自定义QStyledItemDelegate上绘制背景

时间:2015-04-28 13:49:47

标签: qt qt5 qitemdelegate qstyleditemdelegate

我有一张桌子,正在尝试在example from the qt documentation之后添加自定义委托。然而,虽然背景颜色似乎是正确的,但是如果选择了行,则覆盖似乎缺失(注意 rating 单元格与其余部分之间的蓝色背景的列中的差异行)。 绘制背景的最简单方法是什么,就像标准委托一样

对于QItemDelegate似乎有drawBackground,但QStyledItemDelegate没有这样的功能。不幸的是drawBackground,也省略了在你左边的单元格中看到的略亮的矩形(顶部和底部比背景小1 px)。

enter image description here

1 个答案:

答案 0 :(得分:0)

您说您根据Qt StarDelegate示例为您的委托建模。就像一个实验。您可以尝试根据此代码为您的委托建模:

void StarDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
const QModelIndex &index) const
{
    QStyledItemDelegate::paint(painter, option, index);
    if (index.data().canConvert<StarRating>()) {
        StarRating starRating = qvariant_cast<StarRating>(index.data());
        QStyledItemDelegate::paint(painter, option, index);
        starRating.paint(painter, option.rect, option.palette,
            StarRating::ReadOnly);
    }
}

它也是Qt示例中的StarDelegate,但我稍微更改了一下,因此无论表格单元格如何,都会先绘制默认背景。然后,如果它是StarRating单元格,则为星星。我希望你能以这种方式获得默认的样式背景。不能保证,我自己也没试过。 : - )