QAbstractButton 類

QAbstractButton 類是按鈕 Widget 抽象基類,為按鈕提供共有功能。 更多...

頭: #include <QAbstractButton>
CMake: find_package(Qt6 REQUIRED COMPONENTS Widgets)
target_link_libraries(mytarget PRIVATE Qt6::Widgets)
qmake: QT += widgets
繼承: QWidget
繼承者: QCheckBox , QPushButton , QRadioButton ,和 QToolButton

特性

公共函數

QAbstractButton (QWidget * parent = nullptr)
virtual ~QAbstractButton ()
bool autoExclusive () const
bool autoRepeat () const
int autoRepeatDelay () const
int autoRepeatInterval () const
QButtonGroup * group () const
QIcon icon () const
QSize iconSize () const
bool isCheckable () const
bool isChecked () const
bool isDown () const
void setAutoExclusive (bool)
void setAutoRepeat (bool)
void setAutoRepeatDelay (int)
void setAutoRepeatInterval (int)
void setCheckable (bool)
void setDown (bool)
void setIcon (const QIcon & icon )
void setShortcut (const QKeySequence & key )
void setText (const QString & text )
QKeySequence shortcut () const
QString text () const

公共槽

void animateClick ()
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 ()
virtual bool hitButton (const QPoint & pos ) const
virtual void nextCheckState ()

重實現保護函數

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

詳細描述

此類實現 abstract 按鈕。此類的子類處理用戶動作,並指定如何繪製按鈕。

QAbstractButton 為按鈕和可復選 (觸發) 按鈕提供支持。可復選按鈕的實現在 QRadioButton and QCheckBox 類。按鈕的實現在 QPushButton and QToolButton 類;這些還提供觸發行為若有要求。

任何按鈕都可以顯示包含文本和圖標的標簽。 setText () 設置文本; setIcon () 設置圖標。若按鈕被禁用,將改變其標簽以賦予按鈕禁用外觀。

若按鈕是具有包含和號 & 字符串的文本按鈕,QAbstractButton 會自動創建快捷鍵。例如:

QPushButton *button = new QPushButton(tr("Ro&ck && Roll"), this);
					

The Alt+C 快捷方式被賦值給按鈕,即:當用戶按下 Alt+C 按鈕會調用 animateClick ()。見 QShortcut 文檔編製瞭解細節。要顯示實際和號,使用 &&。

還可以設置自定義快捷鍵使用 setShortcut () 函數。這對於沒有任何文本的按鈕非常有用,因此不可以有任何自動快捷方式。

button->setIcon(QIcon(":/images/print.png"));
button->setShortcut(tr("Alt+F7"));
					

由 Qt 提供的所有按鈕 ( QPushButton , QToolButton , QCheckBox ,和 QRadioButton ) 均可以顯示 text and icons .

可以把按鈕設為對話框默認按鈕通過 QPushButton::setDefault () 和 QPushButton::setAutoDefault ().

QAbstractButton 提供用於按鈕的大多數狀態:

  • isDown () 指示按鈕是否 pressed 下。
  • isChecked () 指示按鈕是否 checked 。隻有可復選按鈕可以被復選或取消復選 (見下文)。
  • isEnabled () 指示用戶是否可以按下按鈕。

    注意: 與其它 Widget 相反,按鈕派生自 QAbstractButton 接受鼠標和上下文菜單事件當被禁用時。

  • setAutoRepeat () 設置按鈕是否會自動重復若用戶按下按鈕。 autoRepeatDelay and autoRepeatInterval 定義自動重復如何做。
  • setCheckable () 設置按鈕是否為可觸發按鈕。

差異在 isDown () 和 isChecked () 如下所示。當用戶點擊觸發按鈕以復選時,按鈕首先 pressed 然後釋放到 checked 狀態。當用戶再次點擊它 (以取消復選) 時,按鈕先被移到 pressed 狀態,然後到 unchecked 狀態 ( isChecked () 和 isDown () 兩者為 false)。

QAbstractButton 提供 4 個信號:

  1. pressed () 發射,當鼠標光標在按鈕內按下鼠標左鍵時。
  2. released () 發射,當釋放鼠標左鍵時。
  3. clicked () 發射當首次按下然後釋放按鈕時,當鍵入快捷鍵時或當 click () 或 animateClick () 被調用。
  4. toggled () 發射,當觸發按鈕狀態改變時。

要子類 QAbstractButton,必須至少重實現 paintEvent () 以繪製按鈕輪廓及其文本或像素圖。通常明智的是重實現 sizeHint (),且有時是 hitButton () (以確定按鈕按下是否在按鈕內)。對於具有 2 種以上狀態的按鈕 (像 3 狀態按鈕),還必須重實現 checkStateSet () 和 nextCheckState ().

另請參閱 QButtonGroup .

特性文檔編製

autoExclusive : bool

此特性保持是否啓用自動獨占

若自動獨占被啓用,屬於同一父級 Widget 的可復選按鈕的行為就像它們屬於同一獨占按鈕組。在獨占按鈕組中,任何時候隻能復選一按鈕;復選另一按鈕,自動取消復選先前復選的按鈕。

特性對屬於按鈕組的按鈕,不起作用。

默認情況下,autoExclusive (自動獨占) 是關閉的,除單選按鈕外。

訪問函數:

bool autoExclusive () const
void setAutoExclusive (bool)

另請參閱 QRadioButton .

autoRepeat : bool

此特性保持是否啓用 autoRepeat

若 autoRepeat 被啓用,那麼 pressed (), released (),和 clicked () 信號將按定期間隔發射當按鈕被按下時。autoRepeat 默認情況下是關閉的。初始延遲和重復間隔以毫秒為單位定義通過 autoRepeatDelay and autoRepeatInterval .

注意:若按鈕被快捷鍵按下,那麼自動重復是被係統而不是此類啓用和計時。 pressed (), released (),和 clicked () 信號將像在正常情況下一樣被發射。

訪問函數:

bool autoRepeat () const
void setAutoRepeat (bool)

autoRepeatDelay : int

此特性保持自動重復的初始延遲

autoRepeat 被啓用,那麼 autoRepeatDelay 定義在自動重復反衝之前的初始延遲 (以毫秒為單位)。

訪問函數:

int autoRepeatDelay () const
void setAutoRepeatDelay (int)

另請參閱 autoRepeat and autoRepeatInterval .

autoRepeatInterval : int

此特性保持自動重復的間隔

autoRepeat 被啓用,autoRepeatInterval 將定義自動重復間隔的長度 (以毫秒為單位)。

訪問函數:

int autoRepeatInterval () const
void setAutoRepeatInterval (int)

另請參閱 autoRepeat and autoRepeatDelay .

checkable : bool

此特性保持按鈕是否可復選

默認情況下,按鈕是不可復選的。

訪問函數:

bool isCheckable () const
void setCheckable (bool)

另請參閱 checked .

checked : bool

此特性保持按鈕是否被復選

僅可復選按鈕纔可以被復選。默認情況下,按鈕是取消復選的。

訪問函數:

bool isChecked () const
void setChecked (bool)

通知程序信號:

void toggled (bool checked )

另請參閱 checkable .

down : bool

此特性保持按鈕是否被按下

若此特性為 true ,按鈕被按下。信號 pressed () 和 clicked () 不發射,若將此特性設為 true。默認為 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 )

成員函數文檔編製

[explicit] QAbstractButton:: QAbstractButton ( QWidget * parent = nullptr)

構造抽象按鈕采用 parent .

[虛擬] QAbstractButton:: ~QAbstractButton ()

銷毀按鈕。

[slot] void QAbstractButton:: animateClick ()

Performs an animated click: the button is pressed immediately, and released 100ms later.

在按鈕被釋放之前,再次調用此函數會重置釋放計時器。

會酌情發射點擊關聯的所有信號。

此函數什麼都不做若按鈕 disabled.

另請參閱 click ().

[override virtual protected] void QAbstractButton:: changeEvent ( QEvent * e )

重實現: QWidget::changeEvent (QEvent *event).

[virtual protected] void QAbstractButton:: checkStateSet ()

此虛擬處理程序被調用當 setChecked () 有使用,除非調用它從 nextCheckState ()。它允許子類重置它們的中間按鈕狀態。

另請參閱 nextCheckState ().

[slot] void QAbstractButton:: click ()

履行點擊。

與點擊關聯的所有尋常信號都會適當發射。若按鈕可復選,觸發按鈕狀態。

此函數什麼都不做若按鈕 disabled.

另請參閱 animateClick ().

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

此信號發射,當激活按鈕 (即:按下然後釋放,當鼠標光標在按鈕內) 時,當鍵入快捷鍵時,或當 click () 或 animateClick () 被調用。顯而易見,此信號 not 被發射若調用 setDown (), setChecked () 或 toggle ().

若按鈕是可復選的, checked 為 true 若按鈕被復選,或 false 若按鈕未被復選。

另請參閱 pressed (), released (),和 toggled ().

[override virtual protected] bool QAbstractButton:: event ( QEvent * e )

重實現: QWidget::event (QEvent *event).

[override virtual protected] void QAbstractButton:: focusInEvent ( QFocusEvent * e )

重實現: QWidget::focusInEvent (QFocusEvent *event).

[override virtual protected] void QAbstractButton:: focusOutEvent ( QFocusEvent * e )

重實現: QWidget::focusOutEvent (QFocusEvent *event).

QButtonGroup *QAbstractButton:: group () const

返迴此按鈕所屬的組。

若按鈕不是成員對於任何 QButtonGroup ,此函數返迴 nullptr .

另請參閱 QButtonGroup .

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

返迴 true if pos 在可點擊按鈕矩形內;否則返迴 false .

默認情況下,可點擊區域是整個 Widget。子類可以重實現此函數,以提供不同形狀和大小的可點擊區域支持。

[override virtual protected] void QAbstractButton:: keyPressEvent ( QKeyEvent * e )

重實現: QWidget::keyPressEvent (QKeyEvent *event).

[override virtual protected] void QAbstractButton:: keyReleaseEvent ( QKeyEvent * e )

重實現: QWidget::keyReleaseEvent (QKeyEvent *event).

[override virtual protected] void QAbstractButton:: mouseMoveEvent ( QMouseEvent * e )

重實現: QWidget::mouseMoveEvent (QMouseEvent *event).

[override virtual protected] void QAbstractButton:: mousePressEvent ( QMouseEvent * e )

重實現: QWidget::mousePressEvent (QMouseEvent *event).

[override virtual protected] void QAbstractButton:: mouseReleaseEvent ( QMouseEvent * e )

重實現: QWidget::mouseReleaseEvent (QMouseEvent *event).

[virtual protected] void QAbstractButton:: nextCheckState ()

調用此虛擬處理程序,當點擊按鈕時。默認實現調用 setChecked (! isChecked ()) 若按鈕 isCheckable ()。它允許子類實現中間按鈕狀態。

另請參閱 checkStateSet ().

[override pure virtual protected] void QAbstractButton:: paintEvent ( QPaintEvent * e )

重實現: QWidget::paintEvent (QPaintEvent *event).

[signal] void QAbstractButton:: pressed ()

此信號發射,當按下按鈕時。

另請參閱 released () 和 clicked ().

[signal] void QAbstractButton:: released ()

此信號發射,當釋放按鈕時。

另請參閱 pressed (), clicked (),和 toggled ().

[override virtual protected] void QAbstractButton:: timerEvent ( QTimerEvent * e )

重實現: QObject::timerEvent (QTimerEvent *event).

[slot] void QAbstractButton:: toggle ()

切換可復選按鈕的狀態。

另請參閱 checked .

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

此信號被發射,每當可復選按鈕改變其狀態時。 checked 為 true 若按鈕被復選,或 false 若按鈕未被復選。

這可能是用戶動作的結果, click () 槽被激活,或因為 setChecked () 被調用。

在發射此信號之前,會更新獨占按鈕組中的按鈕狀態。這意味著槽可以充當狀態有變化組中的按鈕,發射的 off 信號或 on 信號。

例如,可以使用以下模式實現由新近復選按鈕發射的信號做齣反應,但忽略來自未復選按鈕的信號的槽:

void MyWidget::reactToToggle(bool checked)
{
   if (checked) {
      // Examine the new button states.
      ...
   }
}
				

按鈕組的創建可以使用 QButtonGroup 類,並更新按鈕狀態監視采用 QButtonGroup::buttonClicked () 信號。

注意: 通知程序信號對於特性 checked .

另請參閱 checked and clicked ().