0

我使用 QTableview 和 QAbstractTableModel 创建了一个表。我使用 QHeaderView 添加了一些垂直标题。在一个标题单元格中,我想使用委托 ..

我正在使用委托,但它没有任何影响..

我在哪里做错了吗?

4

2 回答 2

3

自己有这个问题。Qt 文档的答案很简单,也很烦人:

注意:每个标头都为每个部分本身呈现数据,并且不依赖于委托。因此,调用标头的 setItemDelegate() 函数将不起作用。

换句话说,您不能将委托与 QHeaderView 一起使用。

于 2012-08-10T06:56:02.933 回答
1

作为记录,如果您想设置 QHeaderView 部分的样式,则必须通过标头数据模型(更改 Qt::FontRole 等)或派生您自己的 QHeaderView(不要忘记将其传递给用“setVerticalHeader()”) 覆盖你的表并覆盖它的paintSection() 函数。IE:

void YourCustomHeaderView::paintSection(QPainter* in_p_painter, const QRect& in_rect, int in_section) const
{
    if (nullptr == in_p_painter)
        return;

    // Paint default sections
    in_p_painter->save();
    QHeaderView::paintSection(in_p_painter, in_rect, in_section);
    in_p_painter->restore();

    // Paint your custom section content OVER a specific, finished
    // default section (identified by index in this case)
    if (m_your_custom_section_index == in_section)
    {
        QPen pen = in_p_painter->pen();
        pen.setWidthF(5.5);
        pen.setColor(QColor(m_separator_color));

        in_p_painter->setPen(pen);
        in_p_painter->drawLine(in_rect.right(), in_rect.top(), in_rect.right(), in_rect.bottom());
    }
}

这个简化的示例当然可以通过样式表轻松完成,但理论上你可以使用这种方法绘制任何你喜欢的东西。

于 2018-06-06T14:10:15.533 回答