| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #include "ximagebutton.h"
- #include <QtDebug>
- 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();
- }
|