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

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

上代码:

[cpp] view plain copy print?

  1. #include <QtGui>
  2. class CoolButton : public QToolButton
  3. {
  4. Q_OBJECT
  5. private:
  6. QIcon m_NormalIcon;
  7. QIcon m_FocusIcon;
  8. QIcon m_PressedIcon;
  9. protected:
  10. void enterEvent(QEvent *event);
  11. void leaveEvent(QEvent *event);
  12. void mousePressEvent(QMouseEvent *event);
  13. void mouseReleaseEvent(QMouseEvent *event);
  14. public:
  15. CoolButton(QWidget *parent = 0);
  16. virtual ~CoolButton();
  17. void SetButtonIcons(const QIcon &normal,
  18. const QIcon &focus = QIcon(),
  19. const QIcon &pressed = QIcon() );
  20. };
  21. CoolButton::CoolButton(QWidget *parent)
  22. : QToolButton(parent)
  23. {
  24. //为了让图标看起来自然一点而设置了这两个操作
  25. setDown(false);
  26. setFocusPolicy(Qt::NoFocus);
  27. }
  28. CoolButton::~CoolButton()
  29. {
  30. }
  31. //重载“进入”和“离开”事件,进入时切换为另一个图标,离开时还原
  32. void CoolButton::enterEvent(QEvent *event)
  33. {
  34. if( isEnabled() && !m_FocusIcon.isNull() )
  35. setIcon(m_FocusIcon);
  36. }
  37. void CoolButton::leaveEvent(QEvent *event)
  38. {
  39. if( isEnabled() )
  40. setIcon(m_NormalIcon);
  41. }
  42. //重载鼠标事件
  43. void CoolButton::mousePressEvent(QMouseEvent *event)
  44. {
  45. if( isEnabled() && !m_PressedIcon.isNull() )
  46. setIcon(m_PressedIcon);
  47. QToolButton::mousePressEvent(event);
  48. }
  49. void CoolButton::mouseReleaseEvent(QMouseEvent *event)
  50. {
  51. if( isEnabled() && m_FocusIcon.isNull() )
  52. setIcon(m_FocusIcon);
  53. QToolButton::mouseReleaseEvent(event);
  54. }
  55. void CoolButton::SetButtonIcons(const QIcon &normal,
  56. const QIcon &focus, const QIcon &pressed)
  57. {
  58. m_NormalIcon = normal;
  59. m_FocusIcon = focus;
  60. m_PressedIcon = pressed;
  61. setIcon(m_NormalIcon);
  62. }
  63. #include "main.moc"
  64. int main(int argc, char **argv)
  65. {
  66. QApplication app(argc, argv);
  67. CoolButton *button = new CoolButton;
  68. //QObject::connect(button, SIGNAL(clicked()), qApp, SLOT(quit()));
  69. button->setIconSize(QSize(40, 40));
  70. button->SetButtonIcons(QIcon("normal.png"), QIcon("focus.png"), QIcon("pressed.png"));
  71. button->show();
  72. return app.exec();
  73. }
时间: 2024-10-06 16:29:21

QT基础(八) 三态按钮设计的相关文章

QT基础(一) ui类设计和使用

用designer设计的*.ui文件可以通过uic工具转换为*.h文件(在编译时也会自动生成这样一个ui_*.h文件),有了这个.h文件就可以直接按照纯C++的方式对其中的类进行调用.ui文件的使用就是利用默认工具uic自动产生一个类,然后用该类的setui函数加载界面到相应的对象上.       .ui文件的使用有三种形式:第一种是直接使用,第二种是定义一个新类,声明一个ui子对象,利用该对象来加载界面,第三种是将ui作为基类派生新的类. 借用一个例程分析如下: 工程及界面          

Bootstrap &lt;基础八&gt;图片

原文:Bootstrap <基础八>图片 Bootstrap 提供了三个可对图片应用简单样式的 class: .img-rounded:添加 border-radius:6px 来获得图片圆角. .img-circle:添加 border-radius:500px 来让整个图片变成圆形. .img-thumbnail:添加一些内边距(padding)和一个灰色的边框. 请看下面的实例演示: <!DOCTYPE html> <html> <head> <

基于C/S架构的3D对战网络游戏C++框架 _03客户端详细设计与OpenGL、Qt基础

本系列博客主要是以对战游戏为背景介绍3D对战网络游戏常用的开发技术以及C++高级编程技巧,有了这些知识,就可以开发出中小型游戏项目或3D工业仿真项目. 笔者将分为以下三个部分向大家介绍(每日更新): 1.实现基本通信框架,包括对游戏的需求分析.设计及开发环境和通信框架的搭建: 2.实现网络底层操作,包括创建线程池.序列化网络包等: 3.实战演练,实现类似于CS反恐精英的3D对战网络游戏: 技术要点:C++面向对象思想.网络编程.Qt界面开发.Qt控件知识.Boost智能指针.STL算法.STL.

Bootstrap&lt;基础十四&gt; 按钮下拉菜单

使用 Bootstrap class 向按钮添加下拉菜单.如需向按钮添加下拉菜单,只需要简单地在在一个 .btn-group 中放置按钮和下拉菜单即可.也可以使用 <span class="caret"></span> 来指示按钮作为下拉菜单. 下面的实例演示了一个基本的简单的按钮下拉菜单: <!DOCTYPE html> <html> <head> <title>Bootstrap 实例 - 基本的按钮下拉菜单&

QT基础学习笔记

Qt简介:1991, 挪威奇趣科技Trolltech开发的跨平台c++图形用户界面(GUI)应用程序开发.2008,被诺基亚收购2012,转让给芬兰的Digia公司. 商业版:专业版,企业版: // 开源版(GNU) 优势:1.跨平台 2.面向对象 3.丰富API 类库  4.可视化编程 5,时间驱动机制 JAVA--compile once, run anywhere    一次编译,到处运行Qt-- wrire once ,comile anywhere     一次编写,到处编译 桌面操作

2.35 Java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别

java基础总结①抽象②接口③设计抽象类和接口的原则④接口和抽象类的区别 一.抽象 abstract作用:不能产生对象,充当父类,强制子类正确实现重写方法和类相比仅有的改变是不能产生对象,其他的都有,包括构造.属性等等任何一个类只要有一个抽象的方法就成了抽象类 抽象方法 public abstract A();①方法是抽象的,这个类也是抽象的:②子类必须重写抽象方法,除非子类也是抽象类 抽象类可以没有抽象方法,但一般不这么设计 二.接口 interface 接口也是Java的一种引用数据类型(J

cocos2dx基础篇(13)——按钮控件CCControlButton

[引言] 按钮类CCControlButton继承于控件类CCControl. 控件类CCControl主要向子类提供了一系列的控件触发事件.当子控件触发相关的事件后,就会执行相关的控件事件回调函数.这与之前讲的CCMenu中的菜单按钮回调是类似的. 控件类CCControl主要有三个子类: (1)开关控件CCControlSwitch (2)滑块控件CCControlSlider (3)按钮控件CCControlButton 本节讲的是其子类其中之一:按钮类CCControlButton. [

【WPF】使用 XAML 的 Trigger 系统实现三态按钮

利用 WPF 的 Trigger 系统,也可以很简单的只使用xmal实现三态按钮.在Window或UserControl的资源中声明按钮的style并加入触发功能.使用的时候直接在button里复写style就可以了,废话不多说,直接上代码: <UserControl.Resources> <Style x:Key="threeStateButton" TargetType="{x:Type Button}"> <Setter Prop

CSI.SAFE.v14.1.0.1052混凝土预制板和基础系统的终极设计工具

CSI.SAFE.v14.1.0.1052混凝土预制板和基础系统的终极设计工具CSI SAFE 是混凝土预制板和基础系统的终极设计工具.从框架布局到细部图生产,CSI SAFE在一个简单而直观的环境中集成了各个方面的工 程设计过程.CSI SAFE 工程师提供了无与伦比的好处与它的真正独一无二的结合能力,综合能力和易用性. 布局模型是快速.高效与复杂的绘图工具,或者使用某个进口选项将在数据从CAD.电子表格或数据库程序.板或基金会可以是任何形状,可以 包括边缘形状和圆形和样条曲线. 后张拉板和梁