Как реализовать делегата в QHeaderView

Я создал одну таблицу, используя QTableview и QAbstractTableModel. я добавил вертикальный заголовок с помощью QHeaderView. В одной из ячеек заголовка я хочу использовать делегат..

Я использую делегат, но это не имеет никакого влияния.

Где-нибудь я делаю неправильно?


person Viku    schedule 10.08.2012    source источник


Ответы (2)


Сам имел эту проблему. Ответ из документации Qt прост и раздражает:

Примечание. Каждый заголовок сам отображает данные для каждого раздела и не зависит от делегата. В результате вызов функции setItemDelegate() заголовка не будет иметь никакого эффекта.

Другими словами, вы не можете использовать делегатов с QHeaderView.

person codencandy    schedule 10.08.2012

Для записи, если вы хотите стилизовать раздел 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());
    }
}

Этот упрощенный пример, конечно, можно легко сделать с помощью таблицы стилей, но теоретически вы можете рисовать все, что захотите, используя этот метод.

person i know nothing    schedule 06.06.2018
comment
Возможно, вы захотите включить пример производного класса. Обратите внимание, что этот вопрос вполне может относиться к Qt-4.x, учитывая его возраст. - person hochl; 17.07.2020