xtextbutton.cpp 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. #include "xtextbutton.h"
  2. #include <QtDebug>
  3. XTextButton::XTextButton(QString title,QWidget *parent):QWidget(parent)
  4. {
  5. m_button = new QPushButton();
  6. m_button->setText(title);
  7. connect(m_button,SIGNAL(clicked()),this,SLOT(onClick()));
  8. setButtonTextColor(XButtonDefault);
  9. m_layout = new QVBoxLayout();
  10. m_layout->setContentsMargins(0,0,0,0);
  11. m_layout->addWidget(m_button);
  12. setLayout(m_layout);
  13. m_button->installEventFilter(this);
  14. m_button->setContentsMargins(0,0,0,0);
  15. }
  16. void XTextButton::setText(QString title)
  17. {
  18. m_button->setText(title);
  19. }
  20. XTextButton::~XTextButton()
  21. {
  22. delete m_button;
  23. delete m_layout;
  24. }
  25. bool XTextButton::eventFilter(QObject *target, QEvent *event)
  26. {
  27. XButtonState state = XButtonNone;
  28. if (target == m_button)
  29. {
  30. if (event->type() == QEvent::Enter)
  31. {
  32. state = XButtonEnter;
  33. }
  34. else if (event->type() == QEvent::Leave)
  35. {
  36. state = XButtonDefault;
  37. }
  38. else if (((QMouseEvent *)event)->button() == Qt::LeftButton)
  39. {
  40. if (event->type() == QEvent::MouseButtonPress)
  41. {
  42. state = XButtonPress;
  43. }
  44. if (event->type() == QEvent::MouseButtonRelease)
  45. {
  46. state = XButtonEnter;
  47. }
  48. }
  49. if(m_button->isEnabled())
  50. {
  51. if (state != XButtonNone)
  52. {
  53. setButtonTextColor(state);
  54. }
  55. }
  56. }
  57. return QWidget::eventFilter(target, event);
  58. }
  59. void XTextButton::setEnabled(bool ok)
  60. {
  61. m_button->setEnabled(ok);
  62. }
  63. void XTextButton::setButtonTextColor(XButtonState state)
  64. {
  65. switch(state)
  66. {
  67. case XButtonEnter:
  68. m_button->setStyleSheet("border:0px;color:#1a91dd");
  69. m_button->setCursor(Qt::PointingHandCursor);
  70. break;
  71. default:
  72. m_button->setStyleSheet("border:0px;color:#1a91dd");
  73. m_button->setCursor(Qt::ArrowCursor);
  74. break;
  75. }
  76. }
  77. void XTextButton::onClick()
  78. {
  79. emit clicked();
  80. }