一、引言
Qt Designer中的Buttons部件包括Push Button(常規按鈕、一般稱按鈕)、Tool Button(工具按鈕)、Radio Button(單選按鈕)、Check Box(復選框)、Command Link Button(命令鏈接按鈕)和Dialog Button Box(對話框按鈕盒)六種類型,這六種類型的Buttons部件,都是QWidget的直接或間接子類,同時除了Dialog Button Box外,其他五種都是QAbstractButton的直接子類。
本節將詳細介紹所有Buttons部件,由於QWidget屬性在前面章節已經介紹,因此本節先介紹五大按鈕部件的直接父類QAbstractButton相關屬性,然后再針對每種部件介紹特有屬性。
二、QAbstractButton相關屬性
2.1、屬性概述
QAbstractButton是按鈕類部件的直接父類(Dialog Button Box本身不是按鈕),QAbstractButton在Designer中的屬性有text、icon、iconSize、shortcut、checkable、checked、autoRepeat、autoExclusive、autoRepeatDelay、autoRepeatInterval十個屬性。這十個屬性可以分為兩類,一類是外觀類,包括text、icon、iconSize三個屬性,其他七個屬性老猿都將其歸為操作類屬性。
2.1.1、text屬性
2.1.1.1、屬性介紹
text屬性保存按鈕上顯示的文字,如果按鈕未設置文字則為空字符串。如果文字中包含有與符號(’&’),則該按鈕會自動設置一個快捷鍵,快捷鍵就是’&'后第一個字符,顯示時會在該字符下加下划線。例如將PushButton的按鈕文字設置為“P&ushButton1”,則顯示效果如下:
可以看到u下面多了下划線,使用“Alt+u”組合鍵就可以操作該按鈕。
注意:
1、如果要在text中顯示’&'符號,需要使用兩個‘&‘符號;
2、當text中未設置快捷鍵時,該按鈕的快捷鍵都會被清除。
2.1.1.2 操作方法
可以通過text()獲取text屬性的值,通過setText(QString )設置text屬性的值。
2.1.2、icon屬性
2.1.2.1、屬性介紹
icon屬性保存按鈕上展示的圖標,圖標的缺省大小由圖形界面的樣式決定,但可以通過 iconSize 屬性進行調整。
圖標的幾種子屬性狀態的含義與QWidget的windowIcon屬性相同,可以參考《PyQt(Python+Qt)學習隨筆:Qt Designer中部件的windowIcon屬性》的介紹。
2.1.2.2、操作方法
通過icon()可以訪問icon屬性的值,通過setIcon( QIcon )設置icon屬性的值。
2.1.3、iconSize屬性
iconSize屬性保存按鈕圖標的大小,這個大小是圖標的最大尺寸,小圖標不會放大。
可以通過iconSize()和setIconSize(QSize )來訪問和設置iconSize的值。
2.1.4、shortcut(快捷菜單) 屬性
2.1.4.1、屬性及方法介紹
shortcut 屬性保存與按鈕關聯的快捷鍵。可以使用shortcut()和setShortcut(QKeySequence)訪問和設置該屬性。
2.1.4.2、補充說明
關於這個屬性官網介紹的不多,經老猿實際驗證,它與前面介紹的text屬性通過‘&’符號設置的快捷鍵有如下區別:
1、在該屬性設置的情況下,text屬性的快捷鍵不起作用;
2、text屬性的快捷鍵只支持一個字符,而這個可以設置多個字符。如將計算器的clear快捷鍵設置為‘del’三個字符,則設置界面如下:
3、text屬性的快捷鍵需要使用:Alt+快捷字符觸發,而shortcut屬性的快捷鍵就是設置的字符自身,並且可以支持非字母鍵。
2.1.5、checkable(是否可選擇)屬性
checkable屬性確認按鈕是否可以被選中,缺省情況下該值為False,即按鈕是不能被選中的。
可選擇的pushButton、toolButton、commandLinkButton類按鈕按下之后,按鈕不會自動彈起來,此時按鈕為選中狀態,當再次點擊按鈕時,按鈕會彈起來,變為未被選中狀態。
可選擇的Radio Button、checkBox類按鈕按下之后,按鈕在選擇和不選擇狀態之間切換,當按鈕不能選擇時,Radio Button類按鈕無法操作,checkBox類按鈕需要看tristate是否設置為False,如果設置為了False,則checkBox類按鈕也無法操作,否則可以在未選中和半選中之間切換。
可通過isCheckable() 和setCheckable(bool) 讀取和設置按鈕的可選擇狀態。
2.1.6、checked(是否選中)屬性
checked屬性保存按鈕是否被選中的狀態值,如果為True表示按鈕被選中,否則為未被選中。
可以通過isChecked()、setChecked(bool)來訪問和設置checked屬性。
也可以通過按鈕的信號clicked(bool) 來獲取按鈕的選中狀態,信號的槽函數中參數即為按鈕的是否選中狀態。
2.1.7、autoRepeat、autoRepeatDelay、autoRepeatInterval屬性
autoRepeat、autoRepeatDelay、autoRepeatInterval這三個屬性為一組屬性,用於控制按鈕的按下事件是否重復、重復的頻次等。
2.1.7.1、autoRepeat
如果啟用了autoRepeat,則當按鈕按下且鼠標未釋放時,會定期發出pressed()、released()和clicked()信號。默認情況下,autoRepeat處於禁用狀態。autoRepeat處於允許狀態時,延遲時間和重復間隔由autoRepeatDelay、autoRepeatInterva以毫秒為單位定義。
可以通過autoRepeat() 、setAutoRepeat(bool)來訪問和設置autoRepeat屬性。
注意:如果用快捷鍵按下某個按鈕,則系統將啟用自動重復並計時,而不是QAbstractButton類來啟用。此種情況下,pressed()、released()和clicked()信號將像正常情況一樣發出。
2.1.7.2、autoRepeatDelay
此屬性保持自動重復的初始延遲,單位是毫秒。
如果啟用了autoRepeat,則autoRepeatDelay定義自動重復開始之前的初始延遲。即首次發送信號之前的延時,也就是在按鈕被按下到首次發送信號之間的時間間隔。
可以通過autoRepeatDelay () 、setAutoRepeatDelay (int)來訪問和設置autoRepeatDelay 屬性。
2.1.7.3、autoRepeatInterval
autoRepeatInterval屬性保存自動重復觸發按鈕的pressed()、released()和clicked()信號每次之間的時間間隔,單位是毫秒。
可以通過autoRepeatInterval() 、setAutoRepeatInterval (int)來訪問和設置autoRepeatDelay 屬性。
2.1.8、autoExclusive屬性
autoExclusive 屬性保留是否啟用按鈕的自動排它特性,如果啟用了,則屬於同一父部件的可選中按鈕任何時候只能選中一個按鈕;選中另一個按鈕將自動取消選中先前選中的按鈕,這個功能與排他性按鈕組的功能類似。
這個屬性對屬於按鈕組的按鈕沒有影響。
默認情況下,除單選按鈕外,其他按鈕的autoExclusive 屬性為禁用(False)狀態。
可以使用autoExclusive()、setAutoExclusive(bool)訪問和設置該屬性。
三、pushButton按鈕
3.1、簡介
PushButton為一個常規的命令按鈕,按鈕,或者命令按鈕,是圖形用戶界面中最常用的部件之一,需要父組件作為容器,能夠在父組件中進行定位,用於接受用戶點擊執行命令或觸發事件。典型的按鈕有OK、Apply、Cancel、Close、Yes、No和Help等。
命令按鈕是矩形的,通常帶有描述其對應操作的文本標簽,在文本內可以通過“與符號”(&)指定符號后面的字母為快捷鍵字符前,對應快捷鍵為:ALT+與符號后面字符。
PushButton對應的類為QPushButton。
3.2、pushButton屬性
pushButton的屬性除了從QAbstractButton繼承的屬性外,在Designer中還有三個屬性。
3.2.1、default、atuoDefault屬性
3.2.1.1、簡介
default、atuoDefault這兩個屬性是關於窗口中按鈕的缺省按鈕設置的屬性,這兩個屬性僅在父窗口為對話窗才生效,其他窗口類型設置這兩個屬性沒有意義。
按鈕的點擊除了使用鼠標鍵之外,也可以使用回車鍵和空格鍵觸發,default、atuoDefault這兩個屬性正是控制回車鍵和空格鍵按下時按鈕的響應行為。
3.2.1.2、default屬性
default屬性用於指定對話窗中的按鈕是否為默認按鈕,如果按鈕被設置為默認按鈕,當按下回車鍵時,對話框的默認按鈕將自動被按下。
default屬性的默認值為False,可以通過isDefault()、setDefault(bool)來訪問和設置按鈕的default屬性。
另外,官網上說默認按鈕將顯示一個附加的框架(取決於gui樣式),可能是由於樣式設置的問題,老猿沒有驗證到這點。
3.2.1.3、atuoDefault屬性
atuoDefault屬性確認按鈕是否為自動默認按鈕,如果此屬性設置為True,則按鈕是自動默認按鈕。自動默認按鈕在按鈕獲得焦點后,按下回車鍵時自動默認按鈕將自動被按下。
在某些圖形用戶界面樣式中,默認按鈕的周圍有一個額外的邊框,最多3個像素或更多。
對於父窗口是QDialog 的按鈕,此屬性的默認值為True;否則默認值為False。
可以使用autoDefault() 、setAutoDefault(bool)來訪問或設置按鈕的atuoDefault屬性。
3.2.1.4、回車鍵觸發按鈕按下時的按鈕響應行為驗證
經老猿驗證對回車鍵按下時對話窗按鈕的響應情況如下:
1、如果一個對話窗中有多個按鈕的default被設置為True,則取決於生成的代碼中哪個最后執行setDefault(True),后設置的覆蓋前設置的,前面設置的自動將該屬性置為False,但圖形界面設置的屬性值沒有變化,即改變的是運行態;
2、如果對話窗中的多個按鈕都沒有獲得焦點,且有個按鈕設置了default為True,則回車鍵會觸發該默認按鈕按下的操作;
3、如果當前所有按鈕都未獲取到焦點,也無按鈕設置default為True,經老猿驗證回車鍵不會觸發任何按鈕(包括自動默認按鈕)按下,但官網上說會觸發焦點鏈中下一個自動默認按鈕(原文:When the dialog has autoDefault buttons but no default button, pressing enter will press either the autoDefault button that currently has focus, or if no button has focus, the next autoDefault button in the focus chain.);
4、如果當前無按鈕設置default為True,而獲得了焦點的按鈕無atuoDefault屬性,即不是自動默認按鈕,按回車鍵不會觸發任何按鈕按下;
5、圖形界面設計的自動默認按鈕在界面上設置atuoDefault為True時,應用啟動后該按鈕的Default也自動設置為True,因此此時無其他非自動默認按鈕設置了default值為True時,回車鍵會觸發自動默認按鈕的按下。在此種情況下:
- 如果有多個按鈕在界面上設置atuoDefault為True時,響應的按鈕只是其中一個,至於是哪個,老猿驗證是最早設計的atuoDefault,但驗證案例可能不全,因此結論不一定正確
- 多個按鈕在界面上設置atuoDefault為True時的情況,並不適合上面所說的第3點和第4點的情況,也並不完全適合第2點的情況,因為老猿驗證在多個自動默認按鈕存在的情況下,如果程序不改變按鈕的default值,則所有自動默認按鈕的default值都為True。
3.2.1.5、空格鍵觸發按鈕按下的按鈕響應行為驗證
經老猿驗證空格鍵按下時對話窗按鈕的響應情況如下:
1、如果有個按鈕獲得了焦點,則空格鍵始終觸發該焦點按鈕按下;
2、如果無按鈕獲得焦點,但有按鈕設置了default屬性值為True,則會觸發default屬性值為True的按鈕按下;
3、如果無按鈕獲得焦點,也無按鈕設置了default屬性值為True,則會觸發atuoDefault為True的自動默認按鈕的按下;
4、如果無按鈕獲得焦點,也無按鈕設置了default或atuoDefault屬性值為True,則空格鍵無響應。
3.3、flat屬性
flat屬性用於確認按鈕邊框是否凸起,如果為False則凸起,如果為True則邊框與背景是平坦的。
默認值為False,如果設置為True,則除非按下按鈕,否則大多數樣式都不會繪制按鈕背景。通過使用setAutoFillBackground()可用於確保使用 QPalette.Button的畫筆填充背景。
可以通過isFlat() 、setFlat(bool)來訪問或設置該屬性。
3.4、繼承的重要常用屬性
pushButton其他屬性都是從QAbstractButton或QWidget繼承,重要的屬性包括name、font、text、icon、enabled、checkable、checked、autoRepeat、autoRepeatDelay、autoRepeatInterval。
3.5、pushButton的信號
pushButton的信號繼承自QAbstractButton,常用信號包括如下三個:
- pressed:從QAbstractButton繼承,按下按鈕時,發射該信號
- clicked:從QAbstractButton繼承,點擊按鈕時,發射該信號
- released:從QAbstractButton繼承,釋放按鈕時,發射該信號
一次鼠標點擊過程中, 以上3個信號觸發的順序依次為:pressed、released、clicked。
四、RadioButton單選按鈕
RadioButton是單選按鈕,用於提供兩個或多個互斥選項,直接父類為QAbstractButton類,在Designer中沒有自己的單獨屬性。
4.1、繼承的重要常用屬性
RadioButton的屬性都是從QAbstractButton或QWidget繼承,重要的屬性包括與PushButton相同的name、font、text、icon、enabled、checkable、checked、autoRepeat、autoRepeatDelay、autoRepeatInterval這些外,還有autoExclusive。具體屬性請參見本文前面介紹。
4.2、繼承的常用信號
- pressed:從QAbstractButton繼承,按下按鈕時,發射該信號
- clicked:從QAbstractButton繼承,點擊按鈕時,發射該信號
- released:從QAbstractButton繼承,釋放按鈕時,發射該信號
- toggled(bool checked):從QAbstractButton繼承,每當可選中按鈕更改其狀態時,就會發出此信號。如果選中按鈕,則checked為True;如果未選中按鈕,則checked為False。
在一次鼠標點擊過程中, 以上4個信號觸發的順序依次為:pressed、toggled、released、clicked。
四、CheckBox復選框
CheckBox復選框,繼承自QAbstractButton,與RadioButton的區別是選擇模式,單選框提供多選一,復選框提供多選多。復選框有三種狀態:未選中、半選中和選中。
CheckBox的屬性除了從QAbstractButton繼承的屬性外,在Designer中只有一個屬性,就是tristate屬性。
4.1 tristate屬性
tristate屬性表示復選框是三種狀態還是兩種狀態,如果tristate為True,則表示復選框有選中、未選中和半選中三種狀態,如果tristate為False,則表示復選框只有選中、未選中兩種狀態。
復選框的ischecked()方法在選中和半選中狀態下都返回True。半選中狀態一般用於復選框對應選擇內容包含多個,例如Excel刷選數據時,全選是選擇所有數據,未選擇則是一條數據也沒有,在二者之間的狀態為半選中狀態。
tristate屬性缺省為False,可以通過isTristate()、setTristate(bool y = true)進行讀取和設置。
4.2、繼承的重要常用屬性
CheckBox的繼承屬性都是從QAbstractButton或QWidget繼承,重要的繼承屬性與PushButton相同,包括name、font、text、icon、enabled、checkable、checked、autoRepeat、autoRepeatDelay、autoRepeatInterval。
4.3、CheckBox的信號
CheckBox的信號一類是從父類繼承的,與RadioButton繼承的信號相同。另一類信號是CheckBox自身的信號,這類信號只有一個stateChanged信號。
stateChanged信號
stateChanged信號是CheckBox自身提供的信號,該信號在復選框狀態發生改變時觸發,帶一個整型參數state,這個參數為枚舉類型Qt.CheckState,包括未選中、半選中和選中三種狀態值。
對應類型的常量、值、含義如下:
- Qt.Unchecked:值為0,表示未選中
- Qt.PartiallyChecked:值為1,表示半選中
- Qt.Checked:值為2,表示選中。
五、toolButton工具按鈕
toolButton工具按鈕對應類為QToolButton,是一種用於命令或者選項的可以快速訪問的按鈕,通常在ToolBar里面。工具按鈕通常顯示的是圖標,而不是文本標簽。ToolButton支持自動浮起。在自動浮起(autoRaise)模式中,按鈕只有在鼠標指向它的時候才繪制三維的框架。
toolButton除了從父類繼承的屬性之外,在Designer中能設置的自帶屬性有popupMode(彈出菜單顯示模式)、toolButtonStyle(按鈕樣式)、autoRaise(自動浮起)、arrowType(箭頭類型)四個屬性。
5.1、popupMode屬性
5.1.1、屬性介紹
toolButton的popupMode屬性為設有菜單集或Action列表的toolButton指定菜單彈出模式,類型為枚舉類型ToolButtonPopupMode,有如下三種模式:
- DelayedPopup(值為0):按住toolButton一定時間(超時取決於樣式,請參見QStyle.SH_ToolButton_PopupDelay)后,將顯示菜單。典型的應用程序示例是一些web瀏覽器工具欄中的“后退”按鈕。如果用戶單擊它,瀏覽器只需瀏覽回上一頁。如果用戶按下並按住按鈕一段時間,工具按鈕將顯示包含當前歷史列表的菜單;
- MenuButtonPopup(值為1):在此模式下,toolButton顯示一個特殊箭頭,指示有彈出菜單存在。當按下toolButton上的箭頭一部分時,將彈出菜單;
- InstantPopup(值為2):按下toolButton時,立即顯示彈出菜單。toolButton自己對應的Action不會觸發。
缺省類型為DelayedPopup,可以通過popupMode()、setPopupMode(ToolButtonPopupMode mode)來讀取和設置該屬性。
5.1.2、案例
5.1.2.1、案例說明
在一個mainWindow中,設置了個system菜單,system菜單包含Quit和About兩個菜單項以及工具欄,對應動作分別為actionQuit和actionAbout。在窗口中部署了個toolButton按鈕,界面信息如下:
Quit菜單對應動作為關閉窗口,與系統槽函數close()關聯,About菜單對應動作為顯示一個提示信息,與自定義槽函數about()關聯。
該界面對應的派生類定義如下:
class Ui_mainWindowWin(QtWidgets.QMainWindow,mainWinTest.Ui_MainWindow):
def __init__(self):
super(Ui_mainWindowWin, self).__init__()
self.setupUi(self)
self.toolButton.setDefaultAction(self.actionAbout) #將toolButton的點擊與actionAbout關聯
self.toolButton.setMenu(self.menusystem) #將窗口菜單同時設置為toolButton的彈出菜單
def about(self):
print("In about")
QMessageBox.information(self,'About','This is a toolButton test!',QMessageBox.Ok
5.1.2.2、案例1:將彈出模式設置為DelayedPopup
對應toolButton設置信息如下:
運行后初始界面如下:
可以看到直接點擊toolButton並立即釋放按鈕會顯示About信息,如下:
但當點擊后不立即釋放后彈出了菜單,如圖:
5.1.2.3、案例2:將彈出模式設置為MenuButtonPopup
對應toolButton設置信息如下:
運行后初始界面如下:
點擊上圖中按鈕非右邊朝下箭頭部分顯示About信息,如圖:
點擊圖中按鈕右邊朝下箭頭部分則彈出菜單,如圖:
5.1.2.4、案例3:將彈出模式設置為InstantPopup
對應toolButton設置信息如下:
初始運行界面如下:
點擊toolButton的任何部分都顯示彈出菜單,如圖:
5.2、toolButtonStyle屬性
oolButtonStyle屬性用於確認toolButton按鈕顯示文字、圖標的方式,其類型為枚舉類型 Qt.ToolButtonStyle,有如下值:
ToolButtonIconOnly(值為0):僅顯示圖標
ToolButtonTextOnly(值為1):僅顯示文字
ToolButtonTextBesideIcon(值為2):文字和圖標都顯示,文字顯示在圖標右邊
ToolButtonTextUnderIcon(值為3):文字和圖標都顯示,文字顯示在圖標下面
ToolButtonFollowStyle(值為4):按Qt樣式顯示,Qt樣式為枚舉類型 QStyle.StyleHint
缺省值為ToolButtonIconOnly,可以通過toolButtonStyle()、setToolButtonStyle(Qt.ToolButtonStyle style)來讀取和設置該屬性。
5.3、autoRaise屬性
autoRaise屬性表示toolButton按鈕是否自動凸出,類型為布爾類型。默認值為False,可以通過autoRaise()、setAutoRaise(bool enable)來讀取和設置。
如果 autoRaise為False,則toolButton初始狀態為與界面齊平,看起來沒有按鈕一樣,如圖:
上圖中黃色熒光筆標記部分為一個toolButton,設置autoRaise為True時初始狀態看不出來這是個按鈕,但當鼠標移動到期范圍之內時,按鈕會自動凸顯。如圖:
5.4、arrowType屬性
rrowType屬性用於控制在toolButton上是否和怎樣顯示一個箭頭,上圖中是有個向上的箭頭,其類型為枚舉類型Qt.ArrowType,有如下取值:
NoArrow(值為0):不顯示箭頭
UpArrow(值為1):顯示向上箭頭
DownArrow(值為2):顯示向下箭頭
LeftArrow(值為3):顯示向左箭頭
RightArrow(值為4):顯示向右箭頭
缺省值為NoArrow,可以通過arrowType()、setArrowType(Qt.ArrowType type)來讀取和設置。
5.5、toolButton繼承的屬性
toolButton的繼承屬性都是從QAbstractButton或QWidget繼承,重要的繼承屬性與PushButton相同,包括name、font、text、icon、enabled、checkable、checked、autoRepeat、autoRepeatDelay、autoRepeatInterval。
5.6、toolButton的信號
toolButton的信號一類是從父類繼承的,與RadioButton繼承的信號相同。另一類信號是CheckBox自身的信號,這類信號只有一個stateChanged信號。
六、CommandLinkButton命令鏈接按鈕
CommandLinkButton命令鏈接按鈕,繼承自QPushButton,是Windows Vista引入的新控件,它設計的用途與單選按鈕類似,用於在一組互斥選項之間進行選擇。命令鏈接按鈕不應單獨使用,而應作為向導和對話框中單選按鈕的替代,並替代常用的導航式的“下一步”按鈕。
其外觀通常類似於平面按鈕,但除了普通按鈕文本外,還允許使用描述性文本。默認情況下,它還會帶有一個向右的箭頭圖標,表示按下該控件將打開另一個窗口或頁面。
6.1、CommandLinkButton的屬性
Qt Designer中,CommandLinkButton的屬性主要來源於繼承的父類,包括QWidget、QAbstractButton、QPushButton,相關的屬性與QPushButton基本相同,只是比PushButton多了個自己的description屬性,這個屬性在按鈕上顯示為第二行文本。
6.2、與pushButton的關系
CommandLinkButton對應類為QCommandLinkButton,實際上是從pushButton繼承過來的一種按鈕, 外觀像是一個被設置了扁平化的 QPushButton,與PushButton不同主要有如下:
- CommandLinkButton可以在按鈕上顯示雙行文本,首行是QAbstractButton的text顯示,次行類似於副標題,是通過CommandLinkButton的description屬性來設置的
- 默認情況下,CommandLinkButton還會帶有一個向右的箭頭圖標,該圖標實際上就是QAbstractButton的ICon設置圖標,只是填了一個右箭頭作為缺省值
- CommandLinkButton默認類似於一個扁平化自動凸起的按鈕
6.3、CommandLinkButton的界面狀態案例
初始狀態的commandLinkButton案例:
鼠標進入commandLinkButton之后的狀態:
6.4、commandLinkButton的信號
commandLinkButton的信號與pushButton相同,在此不再單獨贅述。
七、dialogButtonBox按鈕盒
dialogButtonBox按鈕盒是Qt提供的可以快速地布置一組按鈕的組件,Qt在按鈕盒內定義了一系列標准按鈕,可以通過在Designer中簡單勾選就可以在界面上部署一組按鈕。
dialogButtonBox的對應類是QDialogButtonBox,該類是從QWidget類繼承的,也是Buttons部件中唯一不從QAbstractButton繼承的組件,老猿認為這是因為dialogButtonBox是一組按鈕的容器,本身並不是按鈕。
dialogButtonBox有三個屬性:orientation、standardButtons、centerButtons,分別表示按鈕盒部署的方向、按鈕盒包含的標准按鈕、以及按鈕盒中的按鈕居中對齊。
7.1、orientation屬性
orientation屬性表示QDialogButtonBox的方向,缺省情況下,方向為水平方向(值為Qt.Horizontal),表示QDialogButtonBox中的按鈕成水平排列,可以調整為垂直方向(值為Qt.Vertical),表示QDialogButtonBox中的按鈕成垂直排列。
可以通過方法orientation()、setOrientation(Qt.Orientation orientation)讀取和設置該屬性。
7.2、centerButtons屬性
centerButtons屬性表示QDialogButtonBox的按鈕是否居中排列,默認情況下,此屬性為False。這種行為對於大多數類型的對話框都是合適的。但有一個顯著的例外是大多數平台(如Windows)上的消息框,其中按鈕是水平居中。
可以通過方法centerButtons()、setCenterButtons(bool center)讀取和設置該屬性。
7.3、standardButtons屬性
在Qt Designer中,可以在界面中使用QDialogButtonBox的standardButtons屬性來配置一組按鈕進行操作。Qt中為QDialogButtonBox定義了一組常用的標准按鈕,可以在Designer中直接在StandardButtons屬性中指定使用,配置界面如圖:
StandardButtons標准按鈕屬性與枚舉類型QDialogButtonBox.StandardButton類型相對應,具體取值及含義如下:
7.4、ButtonRole
在Designer中創建的QDialogButtonBox對應的Button,都有指定的ButtonRole,而我們創建自定義的Button加入到QDialogButtonBox中去時,也需要設定該按鈕的ButtonRole。
7.4.1、ButtonRole理解
ButtonRole的作用在Qt文檔中沒有明確說明,老猿分析,ButtonRole主要有如下三個作用:
- 同一種ButtonRole的角色,界面風格相同,同一種ButtonRole的按鈕在排列時應該依次連續排列
- 同一種ButtonRole的角色所能發送的信號相同
- 給自定義Button加入QDialogButtonBox時進行初始化以簡單快捷實現。
7.4.2、ButtonRole取值及含義
ButtonRole的類型為枚舉類QDialogButtonBox.ButtonRole,相關取值及含義如下:
7.4.3、ButtonRole與StandardButton標准按鈕對應關系
下面為Qt提供的標准按鈕的ButtonRole與StandardButton標准按鈕對應關系,前面為ButtonRole,后面為對應的標准按鈕列表:
1、AcceptRole:Ignore、Ok、Open、Retry、Save、SaveAll、Apply;
2、DestructiveRole:Discard;
3、HelpRole:Help;
4、NoRole:No、NoToAll;
5、RejectRole:Cancel、Close、Abort;
6、ResetRole:Reset、RestoreDefaults;
7、YesRole:Yes、YesToAll。
除了以上ButtonRole之外,ButtonRole中還有一個ActionRole,在標准按鈕中沒有對應的按鈕。
7.5、dialogButtonBox的信號
dialogButtonBox的信號雖然有繼承自父類的信號,但最重要的信號還是自身實現的4個信號:accepted()、helpRequested()、rejected()、clicked(QAbstractButton *button)。
7.5.1、accepted()信號
accepted信號,是按鈕盒中使用AcceptRole 或 YesRole定義的按鈕在點擊后發射的信號。
7.5.2、helpRequested()信號
helpRequested()信號,是按鈕盒中使用HelpRole定義的按鈕在點擊后發射的信號。
7.5.3、rejected()信號
rejected()信號是按鈕盒中使用RejectRole 或 NoRole定義的按鈕在點擊后發射的信號。
7.5.4、clicked(QAbstractButton *button)信號
clicked信號是按鈕盒中任何按鈕被點擊后發送的信號,這個地方的參數是從C語言帶過來的指針類型,在Python中無指針類型,實際在映射到的槽函數中,該參數就是一個QAbstractButton 的對象,代表具體被點擊的按鈕。雖然參數中給出了具體點擊按鈕,但對應按鈕是哪個角色的按鈕、該怎樣進行響應需要應用再進行判斷,在《PyQt(Python+Qt)學習隨筆:Designer中QDialogButtonBox確認clicked信號是哪個按鈕發送的方法》介紹了識別點擊按鈕角色的方法,在此不詳細介紹。
八、總結
本節詳細介紹了Qt Designer中的Buttons類的按鈕組件,包括相關部件的屬性和信號,老猿對其中一些難以快速理解的內容進行了深入闡述和分析,這些內容有助於大家理解Buttons組件的功能和使用方法。