アイコンをテキストの中央に配置するには、この特定のスタイルビヘイビアを作成するために独自のproxy styleを実装する必要があります。テキストの実装
void HeaderProxyStyle::drawControl(ControlElement oCtrElement, const QStyleOption *poStylrOptionption, QPainter *poPainter, const QWidget *poWidget) const
{
// Header label?
if (oCtrElement == CE_HeaderLabel) {
// YES - Allocate style option header
QStyleOptionHeader *poStyleOptionHeader =
(QStyleOptionHeader *) poStylrOptionption;
// Get header icon
QIcon oIcon = qvariant_cast<QIcon>(poStyleOptionHeader->icon);
// Icon is valid?
if(oIcon.isNull()){
// No - Draw text header
QProxyStyle::drawControl(oCtrElement, poStylrOptionption, poPainter, poWidget);
return;
}
// Set icon size 16x16
QSize oIconSize = QSize(16,16);
// Get header section rect
QRect oRect = poStyleOptionHeader->rect;
// Create header icon pixmap
QPixmap oIconPixmap = oIcon.pixmap(oIconSize.width(),oIconSize.height());
// Calculate header text width
int iTextWidth = poStyleOptionHeader->fontMetrics.width(poStyleOptionHeader->text);
QRect oCenterRec = QRect(oRect.left(),
oRect.top() + (oRect.height - iTextSize)/2,
oIconPixmap.width(),oIconPixmap.height());
QRect oTextRect = QRect(oCenterRec.left()+ oIconSize.width(),
oCenterRec.top(), oCenterRec.width() + iTextWidth, oCenterRec.height());
// Draw icon
poPainter->drawPixmap(oCenterRec, oIconPixmap);
// Draw text
poPainter->drawText(oTextRect, poStyleOptionHeader->text);
return;
}
QProxyStyle::drawControl(oCtrElement, poStylrOptionption, poPainter, poWidget);
}
と
#include <QProxyStyle>
#include <QPainter>
class HeaderProxyStyle : public QProxyStyle
{
public:
void drawControl(ControlElement oCtrElement, const QStyleOption * poStylrOptionption, QPainter * poPainter, const QWidget * poWidget = 0) const;
};
センターのアイコンは、その後、あなたのツリービューで
// Set header style
m_treeview->header()->setStyle(&m_oHeaderStyle);
@lauraponsをこのヘッダのスタイルを適用します。あなたはこの質問を持つ任意のより多くの助けが必要なのですか? – Simon
私はこれをコードに統合する方法がわかりません(qtreewidgetから継承されたウィジェットはモデル/代理人とプロキシを使用しています)、素早く応答いただきありがとうございます。 – laurapons
また、私のプロジェクトでモデルビュー構造を使ってみましたが、それを試してみました。統合するために、別々のクラス 'HeaderProxyStyle'を作成し、' m_treeview'を使っているスコープ内にプライベートメンバー 'HeaderProxyStyle m_oHeaderStyle'を追加し、スタイルをヘッダー 'm_treeview-> header() - > setStyle(&m_oHeaderStyle);に設定すると動作します。あなたも私があなたを助けることができるより多くのコードを投稿することができます。 – Simon