首页 > 解决方案 > QStyledItemDelegate + QTreeView::setIndenation 导致文本绘制出现故障

问题描述

已经两天了,我无法得到解决方案。

我有一个习惯QStyledItemDelegate和一个QTreeView. QTreeView's缩进设置为 12。并QStyledItemDelegate's QStyleOptionViewItem::rect设置为 -12。QTreeView当我更改项目文本的颜色时,此设置会导致故障。

在此处输入图像描述

代码

void MyItemViewDelegate::initStyleOption(QStyleOptionViewItem* option, const QModelIndex& index) const
{
    if (m_functor->operator ()(index))
    {
        option->rect.adjust(-12, 0, 0, 0);
    }    
}

MyTreeView::MyTreeView(QWidget* parent)
    : QTreeView(parent)
{
    setIndentation(12);
}

我错过了什么?

不知何故,它与 QTreeView 的视口有关。

标签: qtqt5

解决方案


所以我忘记做的是覆盖:

    QRect QTreeView::visualRect(const QModelIndex& index) const
    {
        if (m_functor->operator ()(index))
        {
            return QTreeView::visualRect(index).adjusted(-m_indentation, 0, 0, 0);
        }

       return QTreeView::visualRect(index);
    }

推荐阅读