Qt入门之常用qt控件认知之Button系列
按钮,常常被理解为触发一种动作请求或者命令,是与用户进行指令交互的操作。Qt中Button系列根据用途被划分为不同的定义,其实现框架为QAbstractButton提供按钮的通用性功能,此为抽象基类,所以无法进行实例化。用户需要继承定义此类,实现paintEvent,实现具体的展示。常见的Button有QPushButton,QToolButton,QRadioButton及QCheckBox。这种根据用户分为标记(toggle)的与非toggle的。此种模式用到的典型的c++一种抽象继承模式,将Button通用的抽象到QAbstractButton类,其余类继承,并根据自己的特点来实现画图展现的功能。为此我们从最基本的开始
1、QAbstractButton:此为按钮的抽象积累,提供按钮通用的功能。此类不能实例化,所以子类处理交互动作,尤其是如何绘制button。其为可按按钮(push button)和可检查(checkable)或切换(toggle)标记按钮提供支持。标记按钮的实现有QRadioButton单选按钮和QCheckBox多选框。可按俺就实现有QPushButton和QToolButton。他们都可以是标记切换,只要需要。
按钮都能显示一个可以包含文字text和图标icon的标签label,使用setText设置文本,setIcon设置图标。如果Button是个文本按钮,则包含的ampersand(‘&’)符号可以添加快捷键shoarcut key。
上述四种实现按钮可同时显示文字和图标。
1.1QAbstractButton可以提供大多数的Button的状态
1)isDown()表示按钮button是否是pressed down按下的
2)isChecked()表示按钮是否被检查或者标记切换的。只有可检查和切换(标记)的按钮可以标记或者取消标记checked or unchecked
3) isEnabled()表示按钮是否可以被用户点按
4)setAutoRepeat()设置按钮是否当用户长按按钮可以auto-repeat(自动重复执行),属性autoRepeatDelay和autoRepeatInterval定义了如何重复响应执行
5) setCheckable()设置按钮是否可切换或者标记的
1.2 QAbstractButton提供如下信号
1)pressed(),当鼠标在button上并点击左键的时候发射。
2)released(),当鼠标左键被释放的时候
3)clicked(bool checked=false),当鼠标首先按下pressed,然后释放,或者快捷键被触发,或者click()或者animateClick()调用
4) toggled() 当可切换(标记)按钮状态改变时发射
1.3 QAbstractButton抽象的按钮属性
1) autoExclusive:bool 标志自动互斥是否激活enabled。如果是激活的,那么属于同一父窗口的可标记chackabled按钮和他们属于一个互斥按钮组表现一样,只有一个按钮状态是checked标记的。
注意,此属性对于属于按钮组button group的按钮。默认是false的,对于radio按钮是true的
bool autoExclusive()及setAutoExclusive(bool)进行访问与设置
2)autoRepeat:bool标志是否重复点按激活的,默认是关的。如果是激活的时候pressed()/released()/clicked()信号会发射,在限定的interval。
注意:如果按钮被按下是通过快捷键shortcut key,此属性被激活并且时间是系统定义的,而不是此类定义的,信号正常发射。
autoRepeat()和setAutoRepeat(bool)设置是否自动重复按钮
3) autoRepeatDelay:int 表示自动哦重复的初始延时时间。
用autoRepeatDelay()和setAutoRepeatDelay(int)设置时间,单位ms级的
4) autoRepeatInterval : int表示自动重复的时间间隔,setAutoRepeatInterval(int)进行设置
5)chekcable:bool 表示button是否可以checkable标记切换,
isCheckable()判断是否可标记,setCheckable(bool)设置
6)checked:bool 表示是否标记,isChecked()获取是否被标记,setChecked(bool)设置标志状态
注意,此属性必须在checkabled的button才能使用,会触发toggled(bool checked)信号
7)down :bool 表示button是否按下。isDown及setDown(bool)进行设置。
8)icon : QIcon 表示icon是否显示在button按钮上。icon的大小根据GUI类型定义的,但可以通过iconSize属性设置。
QIcon icon() : void setIcon(const QIcon &icon)
9)text : QString 属性保存按钮上显示的问题。
通过text()获取值,如果为空则返回一个空串。如果字符里面包含ampersand‘&’符号,则shortcut自动会创建。如果显示&字符,则使用‘&&’就可以了。
没有默认字符串,通过setText(const QString &)设置此值。
1.4 QAbstractButton抽象类提供的常见函数:
1)void QAbstractButton::animateClick ( int msec = 100 ) [slot],按钮会立即被按下pressed,并且msec时间后释放。如果没有释放继续调用此函数,则会重置释放时间。
所有的信号与click会被发射。如果button是disabled,此函数不工作。
2)void QAbstractButton::click () [slot]执行一次点按操作。所有与点按相关联的信号都会被发射,如果button是checkable,那么按钮的状态会切换toggled。如果按钮为disabled则不工作
3)void QAbstractButton::toggle () [slot] 切换按钮的状态,会触发toggled(bool checked)信号
2、QPushButton,是QAbstractButton的实现体。是一个command按钮,点击其执行一些动作或者响应一些问题,常见场景如ok,apply,cancel yse no help等。
命令按钮常用文本表示他的动作。
按钮最重要的状态是:
是否可用(disabled or enabled)
标准的push button 或者togglebutton 或者menu button
开启或者关闭(on or off),仅针对可切换按钮
default还是normal,默认按钮一般会被点击,在一个对话框里使用确定或返回键的时候
auto-repeat自动重复
pressed down 是否被按下
另外一个命令按钮的一个变体是菜单按钮。不仅提供一个命令,当其点击时会弹出一个菜单选项。使用setMenu方法可以将此按钮与弹出菜单选项关联
在一个对话框,按钮可以设置为default 和auto-default按钮。比如当对话框接受焦点的时候其自动获取焦点,可以使用setAutoDefault()设置。
需要注意的是auto-default按钮会占用稍微多一点的空间,及比一个正常按钮宽,用于汇话默认按钮的indicator标记,如果不需要则设置setAutoDefault(false)就可以了
2.1 添加属性:
1)autoDefault:bool
此属性保持命令按钮是否自动默认按钮,即auto default button
2)default:标志此命令按钮是一个默认按钮。
通过bool isDefault()获取、setDefault(bool)设置此属性
default和autoDefault属性决定了当用户在一个对话框按enter时发生的事情
如果一个属性被设置了default,则此按钮自动发射pressed信号,除非autoDefault按钮当前获取了焦点,则autoDefault按钮pressed被发射。
如果对话框dialog只有autoDefault按钮没有default按钮,则当前获取焦点的autoDefault按钮发射pressed,或者没有获取焦点的按钮,则下一个焦点连的按钮被发射。
一个对话框只有一个按钮是default默认按钮,此按钮需要额外的空间表示。
默认按钮default行为只在对话框使用。获取焦点的按钮总是可以被点击通过键盘的空格键
3) flat:bool表示是否显示按钮的border边框
bool isFlat()获取,setFlat(bool)进行设置。
默认值为false,如果设置为true,大多数情况,此按钮的背景不会绘画出来,除非按钮被点击。
setAutoFillBackground()可以用于保证背景可以使用QPalette::Button 格式刷绘画出来。
2.2 常见函数:
QPushButton::QPushButton ( QWidget * parent = 0 )
QPushButton::QPushButton ( const QString & text, QWidget * parent = 0 )
QPushButton::QPushButton ( const QIcon & icon, const QString & text, QWidget *parent = 0 )
创建一个命令按钮text用于描述,QIcon用于显示小图标
QMenu * QPushButton::menu () const
获取与button关联的弹出菜单,如果没有关联菜单返回0
void QPushButton::setMenu ( QMenu * menu )
关联一个菜单到按钮上,这样按钮就形成了菜单按钮
void QPushButton::showMenu () [slot]
显示与button相互关联的按钮,如果没有则什么都不操作。
此函数知道弹出菜单被关才会返回。
3、QRadioButton:单选按钮
单选按钮提供一个按钮和一个label,label用于显示对应的文本信息。
单选按钮是一种开关按钮,可以切换为on或者off即checked或者unchecked。主要用途用于提供给用户‘one of many’选择。如果用户选择另外一个单选按钮,则之前的就被反选了。默认是autoExclusive的,如果是激活的,属于同一个父类的单选按钮只能选中一个,如果需要多个
exclusive互斥选项在同一个父窗口使用,则将他们方知道QButtonGroup内。
不管切换开关都会发射toggle信号发射。
和QPushButton一样,一串文本显示内容,文本加&会自动创建快捷键
设置文本或icon使用抽象类的接口setText及setIcon实现。
4、QCheckBox:复选框,提供一个checkbox和一个文本label
同QRadioButton,是一个开关按钮,可切换状态on或者off,即checked或者unchecked。
一般,此复选框可以enable或者disable但不影响其他复选按钮。但是如果此放置到一个互斥的QButtonGroup里面,则只能选一个复选框。这是有互斥选项的QButtonGroup所限定的属性。
当checkbox复选框是checked标记或者清楚,都会触发stateChangeed信号。可以使用isChecked()去查询复选框按钮是否标记。
除了常用的选中与没选中状态,QCheckBox提供第三种状态即“没有改变”状态。这是很有用的,当你给用户一个既不选择又不反选的复选框。如果使用此状态,设置其属性setTristate(),然后用checkState()去查询当前标记切换的状态。
4.1 tristate:bool 表示此复选框是否是一个tri-state三态复选框
bool isTristate() setTristate(bool)查看及设置
4.2 常用函数:
Qt::CheckState QCheckBox::checkState () const
查看复选框的状态,如果不需要tristatus,直接可以用isChecked,其返回boolean值
void QCheckBox::setCheckState ( Qt::CheckStatestate )
设置当前复选框的状态。如果不需要支持tristate,则可以直接用setChecked(bool)
stateChanged(int state)信号:当复选框状态改变时。
5、QToolButton:顾名思义,就是工具操作相关的按钮。其是一种快速访问按钮命令或选项。所以通常和QToolBar搭配使用。工具按钮通常不显示文本,而显示图标QIcon。其主要搭配QToolBar上的QAction行为创建和使用的。
一般QToolButton会在QToolBar::addAction时创建,或者已经存在的action添加到QToolBar时创建。当然此按键肯定可以与普通案件一样初始化和使用。
QToolButton支持自动强制显示模式。可以使用setAutoRaise()设置按钮浮动。
QToolButton一个经典用法就是可以选择工具,及此按钮有开关之分,比如绘画图里面使用画笔,选择此按钮可以画东西了。
工具按钮图标设置为QIcon,这就可以区分不同的分辨率,在disabled和active活跃状态。如果按钮的功能不可用,则使用非使能disabled像素,激活的pixmap像素在按钮漂浮的时候显示,因为鼠标在上面。
工具按钮外观和特点可以通过设置按钮风格setToolButtonStyle和设置setIconSize修改。
QToolButton另外一个选择是弹出菜单,弹出菜单可以使用setMenu和setPopupMode()配置不同的可用的按钮携带一个菜单集合。弹出列表可以使用setPopupDelay。
本文出自 “zhouhb”
博客,请务必保留此出处http://hongbin0720.blog.51cto.com/3305400/1231118