如何知道 QStyle 中的 header 文本宽度?
How to know header text width in QStyle?
我有一个 QTreeView
并为此使用 ProxyStyle
。
上图只是header。现在我需要在 header 标签旁边绘制 up/down 箭头(用于排序项目),如图所示。为了将箭头放在正确的位置,我需要知道:
- 左边距 = 文本与左边框之间的距离
- 文字宽度
- 右边距 = 文本与箭头之间的距离
在这种情况下如何计算文本宽度?我想到了 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();
我有一个 QTreeView
并为此使用 ProxyStyle
。
上图只是header。现在我需要在 header 标签旁边绘制 up/down 箭头(用于排序项目),如图所示。为了将箭头放在正确的位置,我需要知道:
- 左边距 = 文本与左边框之间的距离
- 文字宽度
- 右边距 = 文本与箭头之间的距离
在这种情况下如何计算文本宽度?我想到了 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();