1

私は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()この場合に使用しますが、間違っています。テキストの幅を計算するにはどうすればよいですか?

4

1 に答える 1