首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在QStyle中知道标题文本的宽度?

如何在QStyle中知道标题文本的宽度?
EN

Stack Overflow用户
提问于 2018-10-17 14:31:46
回答 1查看 108关注 0票数 1

我有一个QTreeView,并为此使用了ProxyStyle

上面的图片只是标题。现在,我需要在标题标签旁边绘制向上/向下箭头(用于排序项),如图所示。为了把箭头放在正确的位置,我需要知道:

  • 左边框=文本与左边框之间的距离
  • 文本宽度
  • 右边距=文本与箭头之间的距离

在这种情况下,如何计算文本宽度?我想到了QFontMetrics,但不知道如何接收文本来计算。

在我的风格中,我只使用drawPrimitive函数

代码语言:javascript
复制
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(),但这是错误的。如何计算文本的宽度?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-17 15:23:10

所有这些都包含在QStyleOptionHeader中。可以通过以下方式获得文本宽度:

代码语言:javascript
复制
int textWidth = header->fontMetrics.boundingRect(header->text).width();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52857397

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档