QT基础(八) 三态按钮设计
admin
2023-08-03 20:40:10
0

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


上代码:


[cpp] view plain copy print?

  1. #include   

  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. }  


相关内容

热门资讯

从“决战中台湾”到“死守新北”... 台湾“九合一选举”开打,中国国民党传出战略重心定调,从“决战中台湾”转向“决战新北”,背后除了暗示2...
穆杰塔巴报复名单加剧对立,美以... 为何伊朗放话将报仇到底,却未终止谈判?美伊和谈前景如何?凤凰卫视连线时事评论员郑浩进行点评分析:穆杰...
辽宁多地停课停业停工 7月12日,省防汛抗旱指挥部办公室通报,受降雨影响,辽河、浑河、太子河、蒲河等河流出现明显涨水过程。...
上半年高频数据折射我国经济稳中... 新华社北京7月12日电(记者潘洁)记者12日从国家发展改革委国家信息中心了解到,今年上半年,线下商圈...
3—5分钟止住动脉出血!黄河科... 近日,黄河科技学院依托省级重点实验室、重点学科平台,由纳米功能材料研究所章子锋博士担任组长,联合工学...
数智为翼,二十而暖:一场跨越时... 二十年意味着什么?对于一个孩子,意味着从牙牙学语到顶天立地;对于一段旅程,意味着从乍见之欢到久处不厌...
荣耀终端申请通信方法专利,便于... 国家知识产权局信息显示,荣耀终端股份有限公司申请一项名为“一种通信方法、装置及存储介质”的专利,公开...
落地黄埔!京东集团全球首个Ro... 7月11日 广东省人民政府与京东集团 战略合作协议签署 暨京东产发RoboBase项目开工活动 在广...
伊朗对美国位于海湾地区的军事目... 总台记者获悉,当地时间7月13日凌晨,来自伊朗境内不同地区发射的无人机和导弹对美国在海湾地区内的军事...
看完《功夫女足》,“周星驰倒欠... 谈到周星驰的新片《功夫女足》,人们很难不把它与2001年的电影《少林足球》做对比。但除了“不被看好的...