#include <QPainter>
#include <QWindowsStyle>
#include <QStyleOptionHeader>
class Style: public QWindowsStyle
{
public:
Style () {}
void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const
{
if (element == PE_IndicatorHeaderArrow )
{
const QStyleOptionHeader *headerOption = qstyleoption_cast<const QStyleOptionHeader *>(option);
int x, y, width, height;
option->rect.getRect(&x, &y, &width, &height);
QPixmap pixmap;
if (headerOption->sortIndicator == QStyleOptionHeader::SortUp)
pixmap.load(PNG_BG_ARROWUP);
else
pixmap.load(PNG_BG_ARROWDOWN);
painter->save();
painter->drawPixmap(x, y, pixmap);
painter->restore();
}
else
QWindowsStyle::drawPrimitive(element, option, painter, widget);
}
};
class CHeaderView: public QHeaderView
{
public:
CHeaderView(Qt::Orientation orientation, QWidget * parent = 0) : QHeaderView(orientation, parent)
{}
protected:
void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const
{
painter->save();
QHeaderView::paintSection(painter, rect, logicalIndex);
painter->restore();
if(logicalIndex == 0)
{
QStyleOptionButton option;
option.rect = QRect(rect.x()+40, rect.y()+10, 16, 30);
QPixmap pixmap;
if (isOn)
{
pixmap.load(PNG_BG_ARROWUP);
option.state = QStyle::State_On;
}
else
{
pixmap.load(PNG_BG_ARROWDOWN);
option.state = QStyle::State_Off;
}
painter->save();
painter->drawPixmap(rect.width()-7, 5, pixmap);
painter->restore();
this->style()->drawPrimitive(QStyle::PE_Frame, &option, painter);
}
}
void mousePressEvent(QMouseEvent *event)
{
if (isOn)
isOn = false;
else
isOn = true;
this->update();
QHeaderView::mousePressEvent(event);
}
private:
bool isOn;
};
#include <QWindowsStyle>
#include <QStyleOptionHeader>
class Style: public QWindowsStyle
{
public:
Style () {}
void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const
{
if (element == PE_IndicatorHeaderArrow )
{
const QStyleOptionHeader *headerOption = qstyleoption_cast<const QStyleOptionHeader *>(option);
int x, y, width, height;
option->rect.getRect(&x, &y, &width, &height);
QPixmap pixmap;
if (headerOption->sortIndicator == QStyleOptionHeader::SortUp)
pixmap.load(PNG_BG_ARROWUP);
else
pixmap.load(PNG_BG_ARROWDOWN);
painter->save();
painter->drawPixmap(x, y, pixmap);
painter->restore();
}
else
QWindowsStyle::drawPrimitive(element, option, painter, widget);
}
};
class CHeaderView: public QHeaderView
{
public:
CHeaderView(Qt::Orientation orientation, QWidget * parent = 0) : QHeaderView(orientation, parent)
{}
protected:
void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const
{
painter->save();
QHeaderView::paintSection(painter, rect, logicalIndex);
painter->restore();
if(logicalIndex == 0)
{
QStyleOptionButton option;
option.rect = QRect(rect.x()+40, rect.y()+10, 16, 30);
QPixmap pixmap;
if (isOn)
{
pixmap.load(PNG_BG_ARROWUP);
option.state = QStyle::State_On;
}
else
{
pixmap.load(PNG_BG_ARROWDOWN);
option.state = QStyle::State_Off;
}
painter->save();
painter->drawPixmap(rect.width()-7, 5, pixmap);
painter->restore();
this->style()->drawPrimitive(QStyle::PE_Frame, &option, painter);
}
}
void mousePressEvent(QMouseEvent *event)
{
if (isOn)
isOn = false;
else
isOn = true;
this->update();
QHeaderView::mousePressEvent(event);
}
private:
bool isOn;
};