QAbstractButton Class
QAbstractButton类是按钮小部件的抽象基类,提供按钮常见的功能。
Header | #include < QAbstractButton > |
---|---|
qmake | QT += widgets |
Inherits | QWidget |
Inherited By | QCheckBox, QPushButton, QRadioButton, and QToolButton |
详细说明
这个类实现了一个抽象按钮。该类的子类处理用户操作,并指定如何绘制按钮。
QAbstractButton提供了对按钮和可检查(切换)按钮的支持。可检查按钮在QRadioButton和QCheckBox类中实现。按钮在QPushButton和QToolButton类中实现;如果需要,它们还提供切换行为。
任何按钮都可以显示包含文本和图标的标签。setText()设置文本;setIcon()设置图标。如果一个按钮被禁用了,它的标签将被更改为一个“禁用”按钮的外观。
如果按钮是一个文本按钮,其字符串中包含一个& (’&’),QAbstractButton会自动创建一个快捷键。例如:
QPushButton *button = new QPushButton(tr("Ro&ck && Roll"), this);
Alt+C快捷键被分配给按钮,也就是说,当用户按下Alt+C按钮将调用animateClick()。详情请参阅【QShortcut】文档。要显示实际的&符,请使用“&&”。
您也可以使用setShortcut()函数设置自定义快捷键。这对于没有任何文本的按钮非常有用,因它没有任何自动快捷键。
button->setIcon(QIcon(":/images/print.png"));
button->setShortcut(tr("Alt+F7"));
Qt提供的所有按钮(QPushButton, QToolButton, QCheckBox, QRadioButton)都可以显示文本和图标。
通过QPushButton::setDefault()和QPushButton::setAutoDefault()将按钮设置为对话框中的默认按钮。
QAbstractButton提供了按钮使用的大多数状态:
-
isDown()表示按钮是否被按下
-
isChecked()表示按钮是否被选中。只有可检查【checkable】的按钮才能被选中和取消选中(见下文)
-
isEnabled()表示用户是否可以按下该按钮
注意:与其他小部件不同,来自QAbstractButton的按钮在禁用时接受鼠标和上下文菜单事件
-
setAutoRepeat()设置如果用户按住该按钮,该按钮是否会自动重复。autoRepeatDelay和autoRepeatInterval定义了如何自动重复
-
setCheckable()设置该按钮是否为切换按钮。
isDown()和isChecked()的区别:当用户单击一个切换按钮来选中它时,该按钮首先被按下,然后释放到选中状态。当用户再次单击它(取消选中它)时,该按钮首先移动到按下状态,然后移动到未选中状态(isChecked()和isDown()都为false)。
QAbstractButton提供了四种信号:
- pressed()是当鼠标光标在按钮内时,按下鼠标左键时触发的。
- release()在释放鼠标左键时触发。
- clicked() 被触发是按钮第一次被按下然后释放时,或者键入快捷键时,或者当click()或animateClick()被调用时,。
- toggled()被触发是切换按钮的状态改变时触发。
子类化QAbstractButton,您必须至少重新实现paintEvent()来绘制按钮的轮廓及其文本或像素图。通常建议重新实现sizeHint(),有时也实现hitButton()(以确定按钮是否在按钮内)。对于有两种以上状态的按钮(如三状态按钮),您还必须重新实现checkStateSet()和nextCheckState()。
属性
排他
-
autoExclusive: bool 是否启用自动独占性
如果启用了自动排他,属于同一父部件的可检查按钮的行为就像它们是同一排他按钮组的一部分。在独占按钮组中,任何时候只能选中一个按钮;选中另一个按钮会自动取消之前选中的按钮。该属性对属于按钮组的按钮无效。默认情况下自动排他是关闭的,但单选按钮除外。
Access functions:
- bool autoExclusive() const
- void setAutoExclusive(bool)
自动重复
-
autoRepeat: bool 是否启用自动重复
如果启用了autoRepeat,那么当按钮按下时,按下(pressed)、释放(released)和单击(clicked)会定期发出信号。
自动重复默认关闭。初始延迟和重复间隔由autoRepeatDelay和autoRepeatInterval以毫秒定义。注意:如果一个按钮按下快捷键,那么自动重复是由系统启用和计时,而不是由这个类。pressed(), released(), 和clicked()信号将像正常情况一样发出。
Access functions:
- bool autoRepeat() const
- void setAutoRepeat(bool)
-
autoRepeatDelay: int 自动重复的初始延迟
如果启用了autoRepeat,那么autoRepeatDelay将在自动重复开始之前以毫秒为单位定义初始延迟。访问函数:
- int autoRepeatDelay() const
- void setAutoRepeatDelay (int)
-
autoRepeatInterval: int 自动重复的时间间隔
如果启用了autoRepeat,那么autoRepeatInterval将以毫秒为单位定义自动重复间隔的长度。Access functions:
- int autoRepeatInterval() const
- void setAutoRepeatInterval(int)
可检查(可选中)
-
checkable: bool 按钮是否可检查
默认情况下,该按钮是不可检查的。
访问函数:- bool isCheckable() const
- void setCheckable(bool)
-
checked: bool 按钮是否被选中
只有可检查的按钮可以被检查。默认情况下,该按钮为未选中状态。
访问函数:- bool isChecked() const
- void setChecked(bool)
通知信号:
- void toggled(bool checked)
-
down: bool 按钮是否被按下
如果此属性为真,则按下按钮。如果将此属性设置为true,则不会发出pressed()和clicked()信号。默认为false。Access functions:- bool isDown() const
- void setDown(bool)
图表
-
icon: QIcon 按钮上显示的图标
图标的默认大小是由GUI样式定义的,但是可以通过设置iconSize属性来调整。Access functions:
- QIcon icon() const
- void setIcon(const QIcon &icon)
-
iconSize: QSize 按钮使用的图标大小
默认大小由GUI样式定义。这是图标的最大尺寸。较小的图标不会被放大。
Access functions:- QSize iconSize() const
void setIconSize(const QSize &size)
- QSize iconSize() const
助记符
- shortcut: QKeySequence 与按钮相关联的助记符
Access functions:- QKeySequence shortcut() const
void setShortcut(const QKeySequence &key)
- QKeySequence shortcut() const
文本
-
text: QString 按钮上显示的文本
如果按钮没有文本,text()函数将返回一个空字符串。
如果文本包含&字符(’&’),则会自动为其创建快捷方式。“&”后面的字符将被用作快捷键。如果文本没有定义任何快捷方式,之前的任何快捷方式都将被覆盖或清除。详情请参阅QShortcut文档。要显示实际的&符,请使用“&&”。Access functions:
- QString text() const
- void setText(const QString &text)
公共函数
构造析构
- QAbstractButton(QWidget *parent = nullptr)
- virtual ~QAbstractButton()
属性相关
- bool autoExclusive() const
- void setAutoExclusive(bool)
- bool autoRepeat() const
- void setAutoRepeat(bool)
- int autoRepeatDelay() const
- void setAutoRepeatDelay(int)
- int autoRepeatInterval() const
- void setAutoRepeatInterval(int)
- bool isCheckable() const
- void setCheckable(bool)
- bool isChecked() const
- bool isDown() const
- void setDown(bool)
- QKeySequence shortcut() const
- void setShortcut(const QKeySequence &key)
- QString text() const
- void setText(const QString &text)
- QIcon icon() const
- void setIcon(const QIcon &icon)
- QSize iconSize() const
特殊
- QButtonGroup * group() const 返回此按钮所属的组
如果按钮不是任何QButtonGroup的成员,这个函数返回nullptr。
公共槽
- void animateClick(int msec = 100) 执行一个动画点击
按钮被立即按下,并在毫秒后释放(默认是100毫秒),在按钮释放之前再次调用此函数将重置释放计时器。
所有与点击相关的信号都被适当地发出。如果按钮被禁用,该功能将不执行任何操作。 - void click() 执行一个点击
所有与点击相关的常见信号都被适当地发出。如果该按钮是可检查的,则该按钮的状态为已切换。
如果按钮被禁用,该功能将不执行任何操作。 - void setChecked(bool) 见属性
- void setIconSize(const QSize &size) 见属性
- void toggle() 切换可检查按钮的状态
信号
- void clicked(bool checked = false)
- void pressed()
- void released()
- void toggled(bool checked)
受保护的函数
- virtual void checkStateSet() 使用setChecked()时,调用虚拟函数
除非是从nextCheckState()中调用它允许子类重置它们的中间按钮状态 - virtual bool hitButton(const QPoint &pos) const pos是否位于可点击按钮的矩形内
默认情况下,可点击的区域是整个小部件。子类可以重新实现这个函数来支持不同形状和大小的可点击区域。 - virtual void nextCheckState() 单击按钮时将调用此虚拟处理程序
如果按钮是checkable(),则默认实现调用setChecked(!isChecked())。它允许子类实现中间按钮状态。
重新实现的受保护的函数
都是事件处理函数
- virtual void changeEvent(QEvent *e) override 状态改变
- virtual bool event(QEvent *e) override 主事件处理程序
- virtual void focusInEvent(QFocusEvent *e) override 焦点进入
- virtual void focusOutEvent(QFocusEvent *e) override 焦点离开
- virtual void keyPressEvent(QKeyEvent *e) override 键按下
- virtual void keyReleaseEvent(QKeyEvent *e) override 键释放
- virtual void mouseMoveEvent(QMouseEvent *e) override 鼠标移动
- virtual void mousePressEvent(QMouseEvent *e) override 鼠标按下
- virtual void mouseReleaseEvent(QMouseEvent *e) override 鼠标释放
- virtual void paintEvent(QPaintEvent *e) override = 0 绘制事件
- virtual void timerEvent(QTimerEvent *e) override 计时器事件