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


相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...