#include "ximagebutton.h" #include XImageButton::XImageButton(QPixmap pixmap, QWidget *parent):QWidget(parent) { initVariable(pixmap); initUI(); } void XImageButton::initVariable(QPixmap pixmap) { m_pixmap = pixmap; m_pButton = new QPushButton(this); m_pLayout = new QVBoxLayout(); m_pButton->installEventFilter(this); connect(m_pButton,SIGNAL(clicked()),this,SLOT(onButtonClick())); } void XImageButton::initUI() { m_pButton->setStyleSheet("background:transparent;border:0px;"); m_pButton->setContentsMargins(0,0,0,0); m_pLayout->setContentsMargins(0,0,0,0); m_pLayout->addWidget(m_pButton); setButtonIcon(XButtonDefault); this->setLayout(m_pLayout); } void XImageButton::changeImage(QPixmap pixmap) { m_pixmap = pixmap; } XImageButton::~XImageButton() { delete m_pButton; delete m_pLayout; } bool XImageButton::eventFilter(QObject *target, QEvent *event) { XButtonState state = XButtonNone; if (target == m_pButton) { if (event->type() == QEvent::Enter) { state = XButtonEnter; } else if (event->type() == QEvent::Leave) { state = XButtonDefault; } else if (((QMouseEvent *)event)->button() == Qt::LeftButton) { if (event->type() == QEvent::MouseButtonPress) { state = XButtonPress; } if (event->type() == QEvent::MouseButtonRelease) { state = XButtonEnter; } } if(m_pButton->isEnabled()) { if (state != XButtonNone) { setButtonIcon(state); } } } return QWidget::eventFilter(target, event); } void XImageButton::setEnabled(bool enable) { m_pButton->setEnabled(enable); } void XImageButton::setButtonIcon(XButtonState state) { setCursor(Qt::ArrowCursor); int nWidth = m_pixmap.width()/4; int nHeight = m_pixmap.height(); m_pButton->setIcon(QIcon(m_pixmap.copy(QRect(state * nWidth, 0, nWidth, nHeight)))); m_pButton->setIconSize(QSize(nWidth, nHeight)); } void XImageButton::onButtonClick() { emit clicked(); }