如何在QHeaderView中实现委托

时间:2012-08-10 04:11:47

标签: c++ qt qt4.7

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

我正在使用该代表,但它没有任何影响..

我在做错了吗?

2 个答案:

答案 0 :(得分:3)

我自己有这个问题。 Qt documentation的答案很简单,很烦人:

  

注意:每个标题都为每个部分本身呈现数据,并且确实如此   不依赖代表。结果,调用标题   setItemDelegate()函数将无效。

换句话说,你不能在QHeaderView中使用委托。

答案 1 :(得分:0)

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

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());
    }
}

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