首页 > 代码库 > QT基础(八) 三态按钮设计

QT基础(八) 三态按钮设计

三态按钮(普通态,鼠标停留态,点击态)在设计炫丽界时是很常用的一项功能,但QT并没有直接支持这个功能,只好自己写一个了,通过继承QToolButton实现。


上代码:


[cpp] view plain copy print?

  1. #include <QtGui>  

  2.   

  3. class CoolButton : public QToolButton  

  4. {  

  5.     Q_OBJECT  

  6. private:  

  7.     QIcon m_NormalIcon;  

  8.     QIcon m_FocusIcon;  

  9.     QIcon m_PressedIcon;  

  10. protected:  

  11.     void enterEvent(QEvent *event);  

  12.     void leaveEvent(QEvent *event);  

  13.     void mousePressEvent(QMouseEvent *event);  

  14.     void mouseReleaseEvent(QMouseEvent *event);  

  15. public:  

  16.     CoolButton(QWidget *parent = 0);  

  17.     virtual ~CoolButton();  

  18.     void SetButtonIcons(const QIcon &normal,   

  19.         const QIcon &focus = QIcon(),  

  20.         const QIcon &pressed = QIcon() );  

  21. };  

  22.   

  23. CoolButton::CoolButton(QWidget *parent)  

  24. : QToolButton(parent)  

  25. {  

  26.     //为了让图标看起来自然一点而设置了这两个操作  

  27.     setDown(false);  

  28.     setFocusPolicy(Qt::NoFocus);  

  29. }  

  30.   

  31. CoolButton::~CoolButton()  

  32. {  

  33.   

  34. }  

  35.   

  36. //重载“进入”和“离开”事件,进入时切换为另一个图标,离开时还原  

  37. void CoolButton::enterEvent(QEvent *event)  

  38. {  

  39.     if( isEnabled() && !m_FocusIcon.isNull() )  

  40.         setIcon(m_FocusIcon);  

  41. }  

  42.   

  43. void CoolButton::leaveEvent(QEvent *event)  

  44. {  

  45.     if( isEnabled() )  

  46.         setIcon(m_NormalIcon);  

  47. }  

  48.   

  49. //重载鼠标事件  

  50. void CoolButton::mousePressEvent(QMouseEvent *event)  

  51. {  

  52.     if( isEnabled() && !m_PressedIcon.isNull() )  

  53.         setIcon(m_PressedIcon);  

  54.     QToolButton::mousePressEvent(event);  

  55. }  

  56.   

  57. void CoolButton::mouseReleaseEvent(QMouseEvent *event)  

  58. {  

  59.     if( isEnabled() && m_FocusIcon.isNull() )  

  60.         setIcon(m_FocusIcon);  

  61.     QToolButton::mouseReleaseEvent(event);  

  62. }  

  63.   

  64. void CoolButton::SetButtonIcons(const QIcon &normal,   

  65.     const QIcon &focus, const QIcon &pressed)  

  66. {  

  67.     m_NormalIcon = normal;  

  68.     m_FocusIcon = focus;  

  69.     m_PressedIcon = pressed;  

  70.     setIcon(m_NormalIcon);  

  71. }  

  72.   

  73. #include "main.moc"  

  74.   

  75. int main(int argc, char **argv)  

  76. {  

  77.     QApplication app(argc, argv);  

  78.     CoolButton *button = new CoolButton;  

  79.     //QObject::connect(button, SIGNAL(clicked()), qApp, SLOT(quit()));  

  80.     button->setIconSize(QSize(40, 40));  

  81.     button->SetButtonIcons(QIcon("normal.png"), QIcon("focus.png"), QIcon("pressed.png"));  

  82.     button->show();  

  83.     return app.exec();  

  84. }  


QT基础(八) 三态按钮设计