у меня есть QTreeView
и использовать ProxyStyle
для этого.
Картинка выше — только заголовок. Теперь мне нужно нарисовать стрелку вверх / вниз (для сортировки элементов) рядом с меткой заголовка, как на рисунке. Чтобы поставить стрелку в правильное положение, мне нужно знать:
Как я могу рассчитать ширину текста в этом случае? Я думал о QFontMetrics, но не знаю, как получить текст для расчета.
В моем стиле я использую только drawPrimitive
функция
void MyStyle::drawPrimitive( PrimitiveElement p_pe, const QStyleOption *p_option, QPainter *p_painter, const QWidget *p_widget ) const
{
int leftmargin = 10;
int rightmargin = 10;
if ( p_pe == PE_IndicatorHeaderArrow )
{
if ( const QStyleOptionHeader *header = qstyleoption_cast<const QStyleOptionHeader *>( p_option ) )
{
QPixmap pix;
if ( header->sortIndicator & QStyleOptionHeader::SortUp )
{
pix = QPixmap( ":/sortUp.png" );
}
else if ( header->sortIndicator & QStyleOptionHeader::SortDown )
{
pix = QPixmap( ":/sortDown.png" );
}
p_painter->drawPixmap( header->rect.left() + leftmargin+ subElementRect( SE_HeaderLabel, p_option, p_widget ).width() + rightmargin, header->rect.top() + pix.height(), pix );
}
}
else
{
QProxyStyle::drawPrimitive( p_pe, p_option, p_painter, p_widget );
}
}
я использую subElementRect( SE_HeaderLabel, p_option, p_widget ).width()
в этом случае, но это неправильно. Как я могу рассчитать ширину текста?
Все это содержится в QStyleOptionHeader
. Ширина текста может быть получена путем вызова:
int textWidth = header->fontMetrics.boundingRect(header->text).width();
Других решений пока нет …