按钮部件
按钮部件共同特性
Qt 用于描述按钮部件的类、继承关系、各按钮的名称和样式,如下图:
助记符:使用字符"&“可在为按钮指定文本标签时设置快捷键,在&之后的字符将作为快捷键。比如 “A&BC” 则 Alt+B 将成为该按钮的快捷键,使用”&"字符设置的快捷键常称为助记符,一般会在其对应字符下加上下划 线,对于 windows 当按下 Alt 键时,才会显示下划线。默认情况下 Qt 不会显示加下划线的快捷键。
按钮的排他性(或称为独占性)和排他性组(独点性组):是指位于同一组(被称为排他性组)中的可选按钮,任何时候只能有一个按钮被选中,选中一个按钮会自动取消之前选中的按钮。Qt 使用 QButtonGroup 类描棕对按钮的分组,通常单选按钮具有排他性,当然复选按钮也可以具有排他性。
可选中、被选中、选中状态:可选中是指像复选按钮或单选按钮之类的按钮,他们是可以被选中的,被选中的按钮呈现出的状态就是选中状态。对于复选按钮,选中后在前面会有一个勾形的符号,而标准按钮 QPushButton 是不可被选中的。
按钮的按下和弹起状态:当在按钮上按下鼠标不放时,按钮通常看起来像是被按下的样子,这时的状态就是按下状态。
菜单按钮:是指单击该按钮会弹出一个下拉菜单的按钮,见下图, 在 Qt 中,标准按钮 QPushButton、工具按钮 QToolButton 可设置为菜单按钮。
按钮的启用与禁用:按钮被禁用时通常会变灰,按钮的启用/禁用是由 QWidget 类中的enabled 属性描述的。
抽象按钮类QAbstractButton
QAbstractButton类介绍
QAbstractButton 是个抽象类,该类是标准按钮 QPushButton、复选按钮 QCheckBox、单选按钮 QRadioButton、工具按钮 QToolButton 的父类,该类描述了按钮的一些共同功能,比如单击按钮发出的信号,按钮的状态等。注意:C++语法规定,不能创建抽象类的对象。
若要子类化 QAbstractButton 类,必须重新实现 paintEvent()函数(这是个纯虚函数),以绘制按钮的轮廓或像素图,并且建议重新实现 sizeHint(),若有两个以上状态的按钮(如三态按钮),还必须重新实现 checkStateSet()和 nextCheckState()函数。
注意:若重新实现了按钮类中的事件处理函数,有可能会阻止 Qt 对按钮的默认处理行为,比如若重写了 QCheckBox 类的 mousePressEvent(),则当在该按钮上单击鼠标时,不会使按钮被选中。因此,程序员重写这些事件处理函数时,通常需要调用父类的该函数,以便使用 Qt 的默认处理行为。
按下状态与选中状态
- Qt 在内置的默认事件处理函数 mousePressEvent()中(以鼠标点击为例)设置了按钮的按下状态,在 mouseReleaseEvent()中清除了按钮的按下状态。也就是说,若程序员仅仅重写了按钮的 mouseReleaseEvent() 函数,且在其中未清除按钮的按下状态,则当使用鼠标点击按钮后,按钮后一直处于按下状态。若重写了 mousePressEvent()函数,且未对按钮设置按下状态,则当用鼠标点击按钮时,则按钮不会出现按下状态。读者可自行编写程序进行验证。
- 按下状态与选中状态的默认执行顺序是:当用鼠标点击按钮时(使用其他方式点击按钮类似),首先设置按下状态,然后设置选中状态,若再次用鼠标点击按钮,也是首先设置按下状态,然后再清除按钮的选中状态。在每次鼠标释放时会清除按钮的按下状态。
QAbstractButton 类中的属性函数
1)autoExclusive:bool 访问函数:bool autoExclusive() const; void setAutoExclusive(bool);
描述了按钮的自动排他性,