ximagebutton.cpp 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "ximagebutton.h"
  2. #include <QtDebug>
  3. XImageButton::XImageButton(QPixmap pixmap, QWidget *parent):QWidget(parent)
  4. {
  5. initVariable(pixmap);
  6. initUI();
  7. }
  8. void XImageButton::initVariable(QPixmap pixmap)
  9. {
  10. m_pixmap = pixmap;
  11. m_pButton = new QPushButton(this);
  12. m_pLayout = new QVBoxLayout();
  13. m_pButton->installEventFilter(this);
  14. connect(m_pButton,SIGNAL(clicked()),this,SLOT(onButtonClick()));
  15. }
  16. void XImageButton::initUI()
  17. {
  18. m_pButton->setStyleSheet("background:transparent;border:0px;");
  19. m_pButton->setContentsMargins(0,0,0,0);
  20. m_pLayout->setContentsMargins(0,0,0,0);
  21. m_pLayout->addWidget(m_pButton);
  22. setButtonIcon(XButtonDefault);
  23. this->setLayout(m_pLayout);
  24. }
  25. void XImageButton::changeImage(QPixmap pixmap)
  26. {
  27. m_pixmap = pixmap;
  28. }
  29. XImageButton::~XImageButton()
  30. {
  31. delete m_pButton;
  32. delete m_pLayout;
  33. }
  34. bool XImageButton::eventFilter(QObject *target, QEvent *event)
  35. {
  36. XButtonState state = XButtonNone;
  37. if (target == m_pButton)
  38. {
  39. if (event->type() == QEvent::Enter)
  40. {
  41. state = XButtonEnter;
  42. }
  43. else if (event->type() == QEvent::Leave)
  44. {
  45. state = XButtonDefault;
  46. }
  47. else if (((QMouseEvent *)event)->button() == Qt::LeftButton)
  48. {
  49. if (event->type() == QEvent::MouseButtonPress)
  50. {
  51. state = XButtonPress;
  52. }
  53. if (event->type() == QEvent::MouseButtonRelease)
  54. {
  55. state = XButtonEnter;
  56. }
  57. }
  58. if(m_pButton->isEnabled())
  59. {
  60. if (state != XButtonNone)
  61. {
  62. setButtonIcon(state);
  63. }
  64. }
  65. }
  66. return QWidget::eventFilter(target, event);
  67. }
  68. void XImageButton::setEnabled(bool enable)
  69. {
  70. m_pButton->setEnabled(enable);
  71. }
  72. void XImageButton::setButtonIcon(XButtonState state)
  73. {
  74. setCursor(Qt::ArrowCursor);
  75. int nWidth = m_pixmap.width()/4;
  76. int nHeight = m_pixmap.height();
  77. m_pButton->setIcon(QIcon(m_pixmap.copy(QRect(state * nWidth, 0, nWidth, nHeight))));
  78. m_pButton->setIconSize(QSize(nWidth, nHeight));
  79. }
  80. void XImageButton::onButtonClick()
  81. {
  82. emit clicked();
  83. }