2017-11-06 26 views

答えて

0

を私はソート方法は、ヘッダのQProxyStyleを作成することによりだった、とdrawControlをオーバーライドします。 また、デフォルトアイコンを非表示にするために空のアイコンを割り当てました。

treeviewHeaderProxy* m_oHeaderStyle = new treeviewHeaderProxy(); 
treeview->header()->setStyle(m_oHeaderStyle); 
treeview->header()->setDefaultAlignment(Qt::AlignCenter); 
treeview->header()->setStyleSheet("QHeaderView::down-arrow { image: url(:/shared/empty); }" 
           "QHeaderView::up-arrow { image: url(:/shared/empty); } "); 

treeviewHeaderProxy.h

class treeviewHeaderProxy : public QProxyStyle 
{ 
public: 
    explicit treeviewHeaderProxy(); 
    void drawControl(ControlElement oCtrElement, const QStyleOption * poStylrOptionption, QPainter * poPainter, const QWidget * poWidget = 0) const; 

}; 

treeviewHeaderProxy.cpp

void treeviewHeaderProxy::drawControl(ControlElement oCtrElement, const QStyleOption *poStyleOptionption, QPainter *poPainter, const QWidget *poWidget) const 
{ 
    // Header label? 
    if (oCtrElement == CE_HeaderLabel) { 
     QStyleOptionHeader *poStyleOptionHeader = (QStyleOptionHeader *) poStyleOptionption; 
     QStyleOptionHeader::SortIndicator sortOption = poStyleOptionHeader->sortIndicator; 
     QRect oRect = poStyleOptionHeader->rect; 

     // Text 
     int iTextWidth = poStyleOptionHeader->fontMetrics.width(poStyleOptionHeader->text); 
     int iTextHeight = poStyleOptionHeader->fontMetrics.height(); 
     QRect oTextRect = QRect(oRect.left() + oRect.width(), catRect.top() + (oRect.height() - iTextHeight)/2, 
           iTextWidth*1.2, iTextHeight); 
     poPainter->setPen(SUPER_DARK_GREY); 
     poPainter->drawText(oTextRect, poStyleOptionHeader->text); // Draw text 

     // Sort Indicator 
     QPixmap oSortPixmap; 
     switch(sortOption){ 
     case QStyleOptionHeader::SortDown: 
      oSortPixmap = QIcon(":/shared/drop_up_grey").pixmap(10,10); 
      break; 
     case QStyleOptionHeader::SortUp: 
      oSortPixmap = QIcon(":/shared/drop_down_grey").pixmap(10,10); 
      break; 
     } 

     if(!oSortPixmap.isNull()){ 
      QRect oSortRect = QRect(oTextRect.left() + oTextRect.width(), oRect.top() + (oRect.height() - oSortPixmap.height())/2, 
            oSortPixmap.width(), oSortPixmap.height()); 
      poPainter->drawPixmap(oSortRect, oSortPixmap); // Draw sortIcon 
     } 
     return; 
    } 
    QProxyStyle::drawControl(oCtrElement, poStyleOptionption, poPainter, poWidget); 
} 
初期化()で

1

あなたがsubcontrol-origin: margin | border | padding | contentを設定する必要があります。

ボックスモデル(余白矩形、境界矩形、パディング矩形、内容矩形について説明しています)を理解するには、以下のドキュメントリンクを参照してください。

http://doc.qt.io/qt-5/stylesheet-customizing.html#the-box-model

だからあなたのコンテンツの隣に追加することができた、あなたのコードにsubcontrol-origin:paddingを追加してみてください。

は、以下のようなもの試してみてください:

QHeaderView::down-arrow { subcontrol-origin:padding; subcontrol-position: center right;} 
+0

これは機能しません、矢印は右側に配置されます。矢印の中心が右隅にあるので、矢印の半分しか見ることができません...サブコントロールの起点を使用して可能性の値を変更して、違いがあるかどうかを確認しようとしましたが、効果を出す。 – laurapons

関連する問題