头文件:#include
qmake:QT+=widgets
继承于:QWidget
继承给:QCheckBox, QPushButton, QRadioButton, QToolButton
QAbstractButton是所有按钮的抽象基类,QCheckBox(复选框按钮), QPushButton(常规按钮), QRadioButton(单选框按钮), QToolButton(工具按钮)都继承于该类,这些属性包括icon,iconSize,text、shortcut、down,checkable、checked、autoRepeat、autoExclusive、autoRepeatDelay、autoRepeatInterval这十一个属性。
相应的QCheckBox, QPushButton, QRadioButton, QToolButton都继承于该类,因此上面提到的属性对于QCheckBox, QPushButton, QRadioButton, QToolButton都是可用的,关于icon,iconSize,text,这三个属性在后续的章节(1.2QPushButton)中有说明,本文不再赘述,我们看一下剩下的八个属性。
注意:按钮除了上述提到的四种,还包括CommandLinkButton按钮(继承于QPushButton),ButtonBox按钮盒(由QDialogButtonBox类包装而成),这两个将在后续章节陆续讲到,现在,我们只需要了解QAbstractButton类即可。
现在让我们看一下这些属性,并适当举例,试图让读者理解其用意。
我们在ui界面拖一个PushButton按钮,一个PlainTextEdit(用于显示文本,当我们按下按钮,PushButton将发送一个信号,随后将显示按钮被按下!)
由于默认按钮按下效果并不明显,我们给按钮添加样式表(关于样式表,此章不讲,后续讲解每一类按钮时,都将会举例样式表美化,如果您想提前了解样式表可以点击此处跳转)。
#pushButton
{
border:1px;
background-color: rgb(196, 112, 255);
}
#pushButton:hover
{
border:1px;
background-color: rgb(47, 120, 255);
}
#pushButton:pressed{
border:1px;
background-color: rgb(47, 120, 255);
}
#pushButton:checked{
border:1px;
background-color: rgb(47, 120, 255);
}
可以看到我们的文本框输出的是乱码,如何解决呢?只需要在代码中加入下列代码即可显示正常。
#if _MSC_VER >= 1600
#pragma execution_character_set("utf-8")
#endif
此属性保存是否按下按钮,如果此属性为true,则按下按钮。如果将此属性设置为true,则不会发出按下和单击的信号。默认为false。
ui界面没有该属性,代码可通过isDown()和setDown(),访问和设置down属性。
该属性保存与按钮关联的快捷键,与前面介绍过用&设置快捷键不同,&设置的快捷键是紧挨着它的第一个字母,且需要使用alt+字母触发,而使用shortcut属性,可以设置多个字母,例如delete,enter,这一类按键,且不需要alt即可触发,当然,也可将其参数设为alt+XXXX。
ui界面在按钮属性栏设置。
代码可通过shortcut()和setShortcut(QKeySequence),访问和设置该属性。
参数为自定义按键或者已定义好的常量,例如常量QKeySequence::New为ctrl+N,新建的快捷键。
我们一起来看一下,给按钮添加代码:
ui->pushButton->setShortcut(QKeySequence::New);
该属性确认按钮是否可以被选中,缺省情况下该值为False,即按钮是不能被选中的。
ui界面,若勾选,则PushButton被按下将不会自动弹起,表示选中状态,需要再次点击,按钮弹起,表示未选中状态,
代码可通过isChecked()和setChecked(bool),访问和设置checked属性。
可选择的pushButton、toolButton、commandLinkButton类按钮按下之后,按钮不会自动弹起来,此时按钮为选中状态,当再次点击按钮时,按钮会弹起来,变为未被选中状态。
可选择的Radio Button、checkBox类按钮按下之后,按钮在选择和不选择状态之间切换,当按钮不能选择时,Radio Button类按钮无法操作,checkBox类按钮需要看tristate是否设置为False,如果设置为了False,则checkBox类按钮也无法操作,否则可以在未选中和半选中之间切换。
该属性保存按钮是否被选中的状态值,true为选中,false为未选中。
ui界面,可手动勾选
代码可通过isChecked()和setChecked(bool),访问和设置checked属性。
如果启用了autoRepeat,则当按钮按下且鼠标未释放时,会定期发出pressed()、released()和clicked()信号。默认情况下,autoRepeat处于禁用状态。autoRepeat处于允许状态时,延迟时间和重复间隔由autoRepeatDelay、autoRepeatInterva以毫秒为单位定义。
代码可通过autoRepeat() 和setAutoRepeat(bool),访问和设置autoRepeat属性。
注意:如果用快捷键按下某个按钮,则系统将启用自动重复并计时,而不是QAbstractButton类来启用。此种情况下,pressed()、released()和clicked()信号将像正常情况一样发出。
autoExclusive 属性保留是否启用按钮的自动排它特性,如果启用了,则属于同一父部件的可选中按钮任何时候只能选中一个按钮;选中另一个按钮将自动取消选中先前选中的按钮,这个功能与排他性按钮组的功能类似。
这个属性对属于按钮组的按钮没有影响。
默认情况下,除单选按钮外,其他按钮的autoExclusive 属性为禁用(False)状态。
可以使用autoExclusive()、setAutoExclusive(bool)访问和设置该属性。
此属性保持自动重复的初始延迟,单位是毫秒。
如果启用了autoRepeat,则autoRepeatDelay定义自动重复开始之前的初始延迟。即首次发送信号之前的延时,也就是在按钮被按下到首次发送信号之间的时间间隔。
可以通过autoRepeatDelay () 、setAutoRepeatDelay (int)来访问和设置autoRepeatDelay 属性。
autoRepeatInterval属性保存自动重复触发按钮的pressed()、released()和clicked()信号每次之间的时间间隔,单位是毫秒。
可以通过autoRepeatInterval() 、setAutoRepeatInterval (int)来访问和设置autoRepeatDelay 属性。