#include "xtextbutton.h" #include XTextButton::XTextButton(QString title,QWidget *parent):QWidget(parent) { m_button = new QPushButton(); m_button->setText(title); connect(m_button,SIGNAL(clicked()),this,SLOT(onClick())); setButtonTextColor(XButtonDefault); m_layout = new QVBoxLayout(); m_layout->setContentsMargins(0,0,0,0); m_layout->addWidget(m_button); setLayout(m_layout); m_button->installEventFilter(this); m_button->setContentsMargins(0,0,0,0); } void XTextButton::setText(QString title) { m_button->setText(title); } XTextButton::~XTextButton() { delete m_button; delete m_layout; } bool XTextButton::eventFilter(QObject *target, QEvent *event) { XButtonState state = XButtonNone; if (target == m_button) { 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_button->isEnabled()) { if (state != XButtonNone) { setButtonTextColor(state); } } } return QWidget::eventFilter(target, event); } void XTextButton::setEnabled(bool ok) { m_button->setEnabled(ok); } void XTextButton::setButtonTextColor(XButtonState state) { switch(state) { case XButtonEnter: m_button->setStyleSheet("border:0px;color:#1a91dd"); m_button->setCursor(Qt::PointingHandCursor); break; default: m_button->setStyleSheet("border:0px;color:#1a91dd"); m_button->setCursor(Qt::ArrowCursor); break; } } void XTextButton::onClick() { emit clicked(); }