详细描述

QAbstractButton类是按钮窗口的抽象基类,提供了按钮的公共特性。

这个类实现了一个抽象按钮。它的子类处理用户操作,并指定按钮的外观。

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, and QRadioButton)都能显示文本和图标。

在对话框中,可以通过 QPushButton::setDefault() and QPushButton::setAutoDefault()设置按钮为默认按钮。

QAbstractButton提供按钮的大部分状态:

  • isDown() 表明按钮被按下。
  • isChecked() 表明按钮被选。只有可选按钮才能被选或者取消选(见下面).
  •  isEnabled() 表明按钮是否可以被用户点击。注意: 和其他控件不同的是,QAbstractButton派生的按钮在禁用时也可以接收鼠标和目录菜单事件
  • setAutoRepeat() 用户按住按钮后按钮将会自动重复触发信号。autoRepeatDelay and autoRepeatInterval定义了自动重复如何进行。
  • setCheckable() 设置按钮是否可选。

isDown和isChecked的区别在于:当用户点击一个开关按钮来选它,按钮会先按下再释放进入到checked状态(但实际的信号toggled比released早)。当用户再一次点击它,按钮先进入pressed状态,再到unchecked状态(这时ischecked和isDown都是false)。

QAbstractButton提供4个信号:

  1.  pressed() 当鼠标在按钮内并按下左键时发送。
  2. released() 左键被释放时发送
  3. clicked() 当按钮先按下后释放或者当快捷键被输入或者click或animateClick被调用时发送
  4. toggled() 开关按钮状态改变时发送。

对于继承QAbstractButton,你至少重新实现paintEvent来绘制按钮的轮廓、文本和图标。重新实现sizeHit也是明智的,为了确定按钮是否按在按钮内有时也需要hitButton。如果想要大于两种状态的按钮(像三态按钮),你必须重新实现checkStateSet和nextCheckState。

见QButtonGroup。


属性文档

autoExclusive : bool

这个属性决定了是否使能按钮自动互斥。  

如果自动互斥使能,在同一个父窗口下的选按钮的表现和互斥按钮组中按钮的表现一样。在互斥按钮组中,任何时刻只能有一个按钮被选;当选其他按钮时之前选中的按钮自动取消选。

属性对按钮组下的按钮没有影响。
        注意:但是添加到按钮组的按钮则不再与同父窗口下的其他按钮互斥。!!!

除了randiobutton其他按钮的autoExclusive默认关闭。

访问接口:

    bool autoExclusive() const
    void setAutoExclusive(bool)

autoRepeat : bool

这个属性决定按钮是否使能自动重复

如果自动重复使能,当按下按钮时,pressed,released,clicked信号会有规律的重复发送。autoRepeat默认关闭。默认延迟和重复间隔通过autoRepeatDelay和autoRepeatInterval定义,单位毫秒。

       注意:如果按钮自动重复被使能,并通过快捷键按下,则由系统计时而不是这个类(译者注:上述两个属性不起作用)。pressed,released,clicked信号都将已正常方式发送。

访问接口:
    bool autoRepeat() const
    void setAutoRepeat(bool)  

autoRepeatDelay : int

这个属性决定默认重复的延迟时间。

如果autoRepeat使能,这个属性定义了自动重复前的延迟时间,单位毫秒。

这个属性在Qt4.2被引进。  

访问接口:

    int autoRepeatDelay() const
    void setAutoRepeatDelay(int)

autoRepeatInterval : int

这个属性决定重复时间间隔

如果autoRepeat使能,这个属性定义了重复时间间隔,单位毫秒。

这个属性在Qt4.2被引进。

访问接口:   
    int autoRepeatDelay() const
    void setAutoRepeatDelay(int)   

checkable : bool

这个属性决定按钮是否可选。

默认按钮不可选。

访问接口:
    bool isCheckable() const
    void setCheckable(bool)

checked : bool

这个属性决定按钮是否被选。

对于可选按钮才能被选,默认按钮没被选。

访问接口:
    bool isChecked() const
    void setChecked(bool)
相关信号:
    void toggled(bool checked) 

down : bool

决定按钮是否被按下

如果这个属性是true,则按钮被按下。如果你设置这个属性为true,则pressed和clicked信号不会被发送(译者注:仅仅表示设置时不会触发这两个信号,点击按钮还是有这两个信号发送的)。

属性默认值false

访问接口:  
    bool isDown() const
    void setDown(bool)

icon : QIcon

决定按钮上显示的图标

图标默认尺寸由GUI样式定义,也可以通过iconSize属性修改

访问接口:   
    QIcon icon() const
    void setIcon(const QIcon &icon) 

iconSize : QSize

决定按钮上图标的尺寸。

图标默认尺寸由GUI样式定义.这是图标的最大尺寸。如果实际图标尺寸比这个小,那它不会被等比放大。

访问接口:   
    QSize iconSize() const
    void setIconSize(const QSize &size)

shortcut : QKeySequence

决定按钮的助记符(快捷键)

访问接口:
    QKeySequence shortcut() const
    void setShortcut(const QKeySequence &key)

text : QString

决定按钮上显示的文本。

如果按钮没有文本,则text函数返回一个空字符串

如果文本中包含取地址符&,将会自动创建一个快捷键。&后的字符将被用作快捷键。如果文本中没有定义快捷键,则之前的所有快捷键被覆盖或者清空。详见QShortcut文档。想要显示&用&&。

没有默认文本。

访问接口:
    QString text() const
    void setText(const QString &text)   


成员函数文档

QAbstractButton::QAbstractButton(QWidget *parent = Q_NULLPTR)

构造一个抽象按钮,并指定其父对象。

注意构造函数就这一个。

QAbstractButton::~QAbstractButton()

析构函数,销毁按钮。

[slot] void QAbstractButton::animateClick(int msec = 100)

槽函数。实现一个动画点击:按钮立即被按下,在msec毫秒后被释放(默认100ms)

在按钮被释放之前再次调用这个函数,将重置释放定时器。(按钮会先被释放(released),且不会触发checked信号)

点击(click)相关的信号都将被适当的发送。

如果按钮被禁用,这个函数将不起作用。

见click().

[virtual protected] void QAbstractButton::checkStateSet()

这个虚函数在使用setChecked时被调用,直到nextCheckState中再次调用它。允许子类重置按钮中间态

见nextCheckState().

[slot] void QAbstractButton::click()

实现点击。所有click相关的信号都在适当的时候被发送。如果按钮可选,按钮的状态被切换。

按钮被禁用时这个函数不起作用。

见animateClick().

[signal] void QAbstractButton::clicked(bool checked = false)

当按钮被激活(即鼠标在按钮上按下然后释放),或输入快捷键,或click或animateClick被调用时这个信号被发送。需要注意的是,当调用setDown,setChecked或者toggle时,这个信号不发送。

如果按钮是可选的,按钮被选时checked是true,被取消选时是false。

见pressed(), released(), and toggled().

QButtonGroup *QAbstractButton::group() const

返回这个按钮所属的组。

见QButtonGroup.

[virtual protected] bool QAbstractButton::hitButton(const QPoint &pos) const

如果pos在可点击按钮矩形框内则返回true,否则返回false。

默认可点击区域是整个控件。子类可以重新实现这个函数以得到不同形状和尺寸的可点击区域。

[virtual protected] void QAbstractButton::nextCheckState()

这个虚函数在按钮被点击时调用。默认的实现是在按钮是可选时调用setChecked(false)。允许子类实现按钮中间态。

见checkStateSet().   

[signal] void QAbstractButton::pressed()

当按钮按下时发送这个信号。

见released() and clicked().

[signal] void QAbstractButton::released()

当按钮释放时发送这个信号。

见pressed(), clicked(), and toggled().

[slot] void QAbstractButton::toggle()

切换按钮的状态

见checked.

[signal] void QAbstractButton::toggled(bool checked)

每当选按钮切换他的状态时这个信号被发送。如果按钮被选则checked为true,否则为false。

可能的原因有用户的操作,click槽函数被激活,或者是因为setChecked被调用。

如果按钮在互斥按钮组中,则他的状态会在这个信号发送前被更新。这意味着槽函数根据所依据的开关状态是按钮组中按钮发送的已经改变的状态

例如,一个忽略已经取消选按钮的信号仅对新选按钮信号作出反应的槽函数可以用这个方式实现:
      void MyWidget::reactToToggle(bool checked)
  {
     if (checked) {
        // Examine the new button states.
        ...
     }
  }
按钮组可以使用QButtonGroup类创建,并通过监听QButtonGroup::buttonClicked() 信号来更新按钮状态。                                   注意:通知信号是为了传递属性checked

见checked和clicked。

 

更多参考:

Qt之QAbstractButton属性验证

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐