本文適用人員:本文比較長,適合不理解Qt Designer部件屬性的人員閱讀或資料查找。css
聲明:
一、若是有人認爲本文是簡單的複製粘貼+翻譯而成,敬請讀本文最後的後記;
二、本文爲老猿Python學習研究精心整理而成,禁止轉載。html
引言
概述
QWidget屬性列表
Qt Designer組件屬性歸類
組件大小及位置控制的屬性
界面響應事件控制屬性
信息管理屬性
外觀控制屬性
後記python
在Qt Designer中,提供了八大類可視化組件(也稱爲組件或控件,下同),分別爲佈局組件(Layouts)、分隔組件(Spacers)、按鈕組件(Buttons)、表項視圖(item views)、表項組件(item widgets)、容器(Containers)、輸入組件(input widgets)、顯示組件(Display widgets),在Qt Designer的應用界面設計時,能夠將各類功能的組件拖拽到窗口上進行應用的可視化界面設計,而每種組件又能夠指定不一樣的屬性。程序員
組件的屬性設置在Qt Designer中的組件屬性編輯部分進行設置的,以下圖右邊部分窗口:
能夠看到,將相關屬性欄目節點收斂後,最頂層的節點爲組件對應的類及全部父類,而且從上往下排列的節點,基本上按照父類在上,子類在下的方式排列,很好的體現了類的繼承關係以及相關屬性是哪一個類提供的。上圖中類的屬性展開後截圖以下:
在Qt Designer中對八大類組件逐一瀏覽後,從組件的設置屬性界面咱們能夠看到,除了佈局組件(Layouts)和分隔組件(Spacers),其餘六大類組件都有共同的父類QWidget以及QObject,其中QObject 只有簡單的屬性objectName,而QWidget則有三十一項的設置屬性,而且佔了全部部件全部屬性的大部分,所以組件屬性的設置很大一部分就是對組件與QWidget類相關屬性的設置。所以本節將詳細介紹Qt Designer與QWidget類相關的組件屬性的含義。web
不一樣的組件類型,其與QWidget類相關屬性在屬性設置界面展現的屬性有所區別,這是由於雖然全部屬性都來自QWidget定義的屬性,但不一樣組件功能方面的差別致使有些屬性不須要使用(如組件的標題對按鈕就沒有做用),所以屬性設置界面把與具體組件無關的QWidget屬性屏蔽了,但窗口類應該是包含了全部其餘組件都會引用的QWidget屬性,所以咱們接下來的介紹就是以新建窗口時選擇Widget模板新建的窗口對應屬性來介紹。框架
Qt Designer新建窗口時的操做界面以下:
窗口新建完成後對應的屬性編輯界面截圖以下:
注意:
Qt Designer中能夠設置的QWidget屬性比QWidget類的屬性要少,只是QWidget類屬性的一個子集,下表是QWidget全部屬性(其中標黃色的是屬性編輯界面沒有的屬性)。編輯器
老猿沒有仔細研究這些未出如今編輯界面的屬性,只是大概看了下,發現沒有出現的部分屬性有幾種狀況:ide
由於沒有研究不在屬性設置界面的全部屬性,只是針對其中簡單的看了看,並無將全部非界面屬性都仔細研究,所以除了上述幾種狀況是否還有其餘狀況不能確認。svg
組件大小控制的屬性有geometry 、baseSize、sizeIncrement、minimumSize、maximumSize和sizePolicy,用於控制組件的初始大小以及動態調整大小的控制。屬性配置界面的geometry 定義了組件的初始大小,其餘屬性都與組件大小調整時控制組件的大小相關。
3.一、geometry屬性
geometry屬性保存組件相對於其父級對象的位置和大小,Qt其實是以一個長方形來表示組件的位置和大小的,包括左上角的座標位置、長度和寬帶。函數
當組件的geometry調整時,組件若是可見將當即接收moveEvent事件和/或調整大小事件resizeEvent事件。若是件當前不可見,則保證它在顯示以前接收適當的事件。若是組件的geometry被要求調整到超出minimumSize()和maximumSize()定義的範圍以外時,則Qt會強制組件的大小必須在定義的範圍內。
可使用geometry()查詢該屬性的值,使用setGeometry(int x, int y, int w, int h)或setGeometry(QRect )設置該屬性的值。與此屬性關聯的函數有: frameGeometry()、rect()、move()、resize()、 moveEvent()、resizeEvent()、minimumSize()和 maximumSize()。
注意:
一、 大小的計數單位都是像素,相關數字不包括窗口框架佔用的位置;
二、 Qt中組件的座標是以組件的左上角爲原點、x軸向右、y軸向下的座標體系。
3.二、baseSize屬性和sizeIncrement屬性
3.2.一、baseSize
組件的 baseSize是組件的基礎大小(單位:像素),若是組件設定了sizeIncrement,該屬性用於在調整組件尺寸時計算組件應該調整到的合適值,但這個屬性缺省值是QSize(0,0),須要使用setBaseSize(int basew, int baseh)設置該值,要查詢該值使用baseSize()方法。
3.2.二、sizeIncrement
sizeIncrement表示組件調整大小時的每次變化的增量大小(單位:像素)的基數,實際調整大小計算公式以下:
width = baseSize().width() + i * sizeIncrement().width()
height = baseSize().height() + j * sizeIncrement().height()
其中i,j爲非負整數。
sizeIncrement的缺省值是QSize(0,0),能夠調用setSizeIncrement(QSize)、setSizeIncrement(int w, int h)設置sizeIncrement,調用sizeIncrement()獲取sizeIncrement的值。
注意:全部組件均可以設置sizeIncrement,但只有窗口對象會生效。
3.三、mimimumSize屬性和maximumSize屬性
3.3.一、mimimumSize
mimimumSize表示部件能被縮小到的最小尺寸,單位爲像素,縮小到該尺寸後不能再進一步縮小了。若是部件在佈局管理器中,且佈局管理器也設置了最小尺寸,則部件自己的最小尺寸以部件的mimimumSize爲準,佈局管理器設置的不起做用。
部件的最小尺寸能夠調用方法setMinimumSize(QSize)或setMinimumSize(int minw, int minh)進行設置,使用minimumSize()返回當前值,若是值被設置爲QSize(0,0)則表示最小尺寸無效。
3.3.二、maximumSize
maximumSize表示部件能被放大到的最大尺寸,放大到該尺寸後不能再進一步放大了。部件的缺省最大值爲QSize(16777215,16777215)
部件的最大尺寸能夠調用方法setMaximumSize(QSize)或setMaximumSize(int maxw, int maxh)進行設置,使用maximumSize()返回當前值,部件的最大值不能超過系統設置部件的最大值常量QWIDGETSIZE_MAX 。
3.四、sizePolicy屬性
部件的sizePolicy屬性用於說明部件在佈局管理中的縮放方式,當部件沒有在佈局管理器中時,該設置無效。
在理解sizePolicy前,先介紹兩個Qt內置的部件屬性sizeHint和minimumSizeHint,分別表示部件的缺省大小、minimumSizeHint建議最小尺寸。
一、sizeHint:爲佈局管理器中部件的缺省大小,若是部件不在佈局管理中就爲無效的值,該值是Qt中對每一個部件大小的建議值,也是缺省值,不能修改;
二、minimumSizeHint:爲Qt推薦的部件最小大小,若是部件不在佈局管理中就爲無效的值,在佈局管理器中minimumSizeHint 就是部件的缺省最小值,除非當前部件的大小策略爲QSizePolicy.Ignore或者minimumSize被設置,佈局管理器不會調整一個部件的大小到比minimumSizeHint 返回值更小的大小。
sizePolicy由四個值組成,分別是水平縮放策略、垂直縮放策略、水平伸縮因子、垂直伸縮因子。
一、縮放策略
水平縮放策略、垂直縮放策略的值都是枚舉類型Policy,該枚舉類型的取值及含義以下:
其中,相關值內的常量由枚舉類型 QSizePolicy.PolicyFlag定義,對應取值及含義以下:
二、伸縮
界面響應事件控制屬性是指針對組件對鍵盤、鼠標事件以及平板觸控筆的事件響應的控制,它包括acceptDrops、contextMenuPolicy、cursor、enabled、focusPolicy、inputMethodHints、mouseTracking、tabletTracking、windowModality、windowTitle這9個屬性。
4.一、enabled屬性
enabled屬性很是簡單,最開始老猿沒準備介紹該屬性的,由於你們都應該知道,但仔細看了看官網文章,以爲仍是有些細節可能不多有人注意到,所以仍是在此介紹一下。
enabled屬性用於表示部件是否可用,一個可用的部件能夠接收和處理鼠標和鍵盤事件,當部件不可用時則沒法接收和處理鼠標和鍵盤事件。
有些部件在被禁用時會以不一樣的方式顯示本身。例如,按鈕可能會將其標籤灰顯。若是部件須要知道它什麼時候被啓用或禁用,則可使用changeEvent()方法來捕獲事件,事件類型設置爲QEvent.EnabledChange。
禁用一個部件時會隱式禁用其全部子部件,啓用部件時將順序啓用全部子部件,除非子部件已被顯式禁用。當父部件保持禁用狀態時,不可能顯式啓用不是窗口的子部件。
enabled屬性缺省值爲True,能夠 經過isEnabled()訪問部件的啓用狀態,經過setEnabled(bool)設置部件的啓用狀態。
4.二、acceptDrops屬性
acceptDrops屬性表示當前部件是否接受鼠標拖放事件,鼠標拖放應該是與鼠標拖拽結合在一塊兒的,在Qt Designer中能夠經過屬性acceptDrops設置部件是否接受鼠標拖放事件。若是部件接受拖放,則在鼠標拖放時,拖放事件會發送給鼠標當前光標下接受拖放的第一個部件。
若是一個部件設置了acceptDrops屬性爲True,則就是通知系統該部件可能接受鼠標拖放事件。
注意:
一、若是當前部件是一個桌面(windowType() == Qt.Desktop), 若是此時另外一應用正在使用桌面則這個屬性設置可能失敗;
二、不要在拖、放事件的處理方法中修改該屬性。
使用acceptDrops()獲取當前部件是否支持拖放;使用setAcceptDrops(bool on)設置當前部件是否支持拖放。
4.三、contextMenuPolicy屬性
contextMenuPolicy爲部件的快捷菜單策略,快捷菜單經過在部件上點擊鼠標右鍵觸發。
快捷菜單策略經過枚舉類型Qt.ContextMenuPolicy來定義,對應枚舉類型取值及含義以下:
經過contextMenuPolicy() 能夠獲取當前部件的快捷菜單策略;經過setContextMenuPolicy(Qt.ContextMenuPolicy policy)能夠設置當前部件的快捷菜單策略。
4.四、focusPolicy屬性
在Qt Designer中能夠設置部件的焦點策略,部件的焦點策略屬性取值範圍由枚舉類型Qt.FocusPolicy來定義,該枚舉類型及其含義以下表所示:
部件能夠經過focusPolicy()能夠獲取當前部件的焦點策略,經過setFocusPolicy(Qt.FocusPolicy policy)設置焦點策略。
4.五、mouseTracking和tabletTracking屬性
mouseTracking和tabletTracking這兩個屬性是跟蹤鼠標或平板觸控筆的移動軌跡的。
4.5.一、mouseTracking
mouseTracking屬性用於保存是否啓用鼠標跟蹤,缺省狀況是不啓用的。沒啓用的狀況下,對應部件只接收在鼠標移動同時至少一個鼠標按鍵按下時的鼠標移動事件,啓用鼠標跟蹤的狀況下,任何鼠標移動事件部件都會接收。
部件方法hasMouseTracking()用於返回當前是否啓用鼠標跟蹤,setMouseTracking(bool enable)用於設置是否啓用鼠標跟蹤。與鼠標跟蹤相關的函數主要是mouseMoveEvent()。
4.5.二、tabletTracking
tabletTracking屬性保存是否啓用部件的平板跟蹤,缺省是不起用的。沒有啓用平板跟蹤的狀況下,部件僅接收觸控筆與平板接觸或至少有個觸控筆按鍵按下時的觸控筆移動事件。
若是部件啓用了平板跟蹤功能,部件能接收觸控筆靠近但未真正接觸平板時的觸控筆移動事件,這能夠用於監視操做位置以及部件的輔助操做功能(如旋轉和傾斜),併爲圖形界面提供這些操做的信息接口。
部件方法hasTabletTracking()用於返回當前是否啓用平板跟蹤,setTabletTracking(bool enable)用於設置是否啓用平板跟蹤。與平板跟蹤相關的函數主要是 tabletEvent()。
4.六、inputMethodHints屬性
inputMethodHints屬性只對輸入部件有效,輸入法使用它來檢索有關輸入法應如何操做的提示,例如,若是設置了只容許輸入數字的標誌,則輸入法可能會更改其可視組件,以反映只能輸入數字。相關取值及含義以下:
輸入提示是多種值的組合,多個值之間經過或操做組合。
若是幾個獨佔標誌被放在一塊兒,則生成的字符集將由指定集的並集組成。例如,指定ImhNumbersOnly 和ImhUppercaseOnly 將產生一個由數字和大寫字母組成的集合。
該屬性缺省值爲Qt.ImhNone,可經過inputMethodHints() 和setInputMethodHints(Qt.InputMethodHints )進行訪問和修改。
注意:
一、 修改時最好先取到當前設置,再與要修改值進行或後再設置;
二、 該屬性僅做爲一個輸入提示,並非全部輸入法都會支持,老猿驗證了幾個中文輸入法好像都不支持。
老猿認爲該屬性沒有多大用途,一是由於輸入法不必定支持,二是由於並不能嚴格限制輸入數據。
4.七、cursor屬性
部件的cursor屬性保存該部件的鼠標光標形狀,當鼠標位於該部件上時就會呈現該屬性設置的光標形狀,對應類型爲枚舉類型Qt.CursorShape,可取值的範圍及含義以下:
注意:
一、上述列表中,最後4個取值在Designer中沒有,這是由於這4個取值不是在屬性編輯中靜態設置的,而是在運行時調整的;
二、上述列表中英文和譯文都列出的是老猿花時間比較多的取值解釋,但仍是怕翻譯得不夠準確,因此列出英文進行對照。
4.八、windowModality屬性
windowModality屬性只對窗口對象有效,保存的是哪些類型的窗口被模式窗口阻塞。
模式窗口防止其餘窗口中的部件獲取輸入。此屬性的值控制對應窗口可見時阻塞哪些類型的窗口獲取輸入。在模式窗口可見時更改此屬性無效,必須先調用hide()隱藏模式窗口,而後再調用show()顯示模式窗口。
相關取值及含義以下:
信息管理屬性包括accessibleDescription、accessibleName、statusTip、toolTip、toolTipDuration、whatsThis、locale、windowFilePath、windowTitle這9個屬性,這些屬性與幫助、提示、窗口標題、殘障人士輔助信息、語言國際化支持等方面,都與應用呈現給用戶的文本信息有關,所以老猿將其歸類到信息管理。
5.一、locale國際化支持
locale屬性用於設置語言環境,包括語言和國家。若是一個部件沒有設置語言環境,則使用父對象的語言環境或者默認語言環境(若是部件是頂層部件)。
可使用locale()獲取部件的語言環境,也能夠經過 setLocale(QLocale )設置部件的語言環境,還能夠經過unsetLocale()取消部件的語言環境設置。
5.二、 translatable、 disambiguation和comment子屬性
每一個顯示的文本信息包括Label的文本、按鈕的文本等、以及輸入控件的輸入內容、幫助信息的文本等均可以在部件屬性編輯中設置國際化子屬性,如:
它們都有三個子屬性,分別是translatable、 disambiguation和comment,這三個屬性的含義分別以下:
一、translatable可譯:表示對應屬性文字不用翻譯成其餘語言;
二、disambiguation消除歧義:這是當有多個須要翻譯文字的對象有相同文字時,避免出現歧義而額外添加的消除歧義字符,缺省爲空,通常歧義字符設置爲其所在對象對應類的名字,此消歧參數是爲轉換器指定註釋的首選方法。
三、comment註釋:添加註釋用於輔助對屬性文字的翻譯,註釋將在翻譯屬性文字時傳遞到翻譯的函數tr()中並與須要翻譯對象關聯,這樣會有助於理解翻譯的文字含義。
對於國際化,老猿沒有研究過,也不許備去研究,之因此列這三個屬性的國際化屬性,純粹是由於纔開始老猿對這三個屬性不知道,而且基本上查不到資料。沒接觸過的人看到這會一頭霧水,所以經過各類方法查閱了不少資料,結合各類資料以及本身的理解單獨在此解釋一下,可能不徹底正確。這這部份內容,無需國際化的人不須要關注,須要國際化的人則須要另外專門研究。
5.三、toolTip、toolTipDuration、statusTip、whatsThis屬性
這幾個屬性與幫助和提示信息相關,除了toolTipDuration外,都有國際化設置的子屬性。
5.3.一、toolTip屬性
toolTip屬性設置部件的toolTip提示信息,toolTip提示信息在鼠標放到控件上會浮動出一個小框顯示提示信息。默認狀況下,僅顯示活動窗口子部件的toolTip,能夠經過在窗口對象設置Qt.WA_AlwaysShowToolTips屬性來改變,但不能是須要顯示tooTip的部件對象中設置。
若是要控制tooTip顯示的行爲(如控制顯示位置),能夠重寫部件的event()方法捕獲事件類型爲QEvent.ToolTip的事件。
缺省值爲空,能夠經過toolTip()和setToolTip( QString )來讀取和設置toolTip。
5.3.二、toolTipDuration屬性
toolTipDuration 屬性控制toolTip顯示的時長,單位是毫秒,若是設置爲-1,則顯示時長根據toolTip內容的長度來計算。
toolTipDuration 缺省值爲-1,能夠經過toolTipDuration ()和settoolTipDuration ( int msec)來讀取和設置toolTipDuration 。
5.3.三、statusTip屬性
statusTip屬性保存statusTip提示信息,statusTip提示信息在鼠標放到控件上時在窗口的狀態欄顯示提示信息,若是窗口無狀態欄則不顯示。
statusTip屬性 缺省值爲空字符串,能夠經過statusTip()和setstatusTip ( QString )來讀取和設置statusTip。
5.3.四、whatsThis
whatsThis屬性保存部件的幫助信息。whatsThis的幫助信息通常在部件得到焦點後按Shift+F1彈出顯示,若是這個快捷鍵被別的功能佔用,則whatsThis的幫助信息可能沒法展現。有些對話窗提供一個帶問號的按鈕能夠點擊顯示whatsThis的幫助信息。
whatsThis屬性 缺省值爲空字符串,能夠經過whatsThis()和setwhatsThis ( QString )來讀取和設置whatsThis。
5.四、accessibleDescription和accessibleName輔助閱讀屬性
accessibleDescription和accessibleName屬性都是用於殘疾人輔助閱讀的,這兩個屬性都有國際化屬性。
5.4.1 accessibleName屬性
這是輔助閱讀中顯示的部件的名稱,對於大多數小部件,無需設置此屬性,由於Qt會調用部件相關屬性顯示,如按鈕將顯示按鈕的文本,但當小部件不提供任何文本時,設置此屬性很重要。例如,只包含圖標的按鈕須要將此屬性設置爲與屏幕閱讀器一塊兒使用。
此屬性默認爲空,經過accessibleName() 和setAccessibleName(QString )能夠對該屬性進行查詢和設置。
5.4.2 accessibleDescription屬性
此屬性保存輔助技術所看到的部件描述,是對accessiblename的補充說明。
此屬性默認爲空,經過accessibleDescription () 和setAccessibleDescription (QString )能夠對該屬性進行查詢和設置。
5.五、windowTitel屬性
windowTitle僅對window和dialog類型的對象生效。
windowTitle是窗口的標題,能夠經過windowTitle() 、setWindowTitle(const QString &)進行讀取和設置。
5.六、windowFilePath屬性
windowFilePath屬性僅對窗口對象有效,用於關聯一個窗口和對應的文件及路徑。
當窗口沒有設置標題屬性的狀況下,則窗口標題展現展現windowFilePath對應的文件名的信息(路徑信息不展現),若是兩者都設置,則優先使用窗口標題屬性的設置做爲標題。
該屬性缺省爲空,能夠經過windowFilePath()和setWindowFilePath(QString )來訪問和設置windowFilePath屬性。
這個功能在窗口打開文件進行操做時可使用來標記打開的文件。
注意該屬性有國際化設置的子屬性。
外觀控制屬性包括autoFillBackground、font、layoutDirection、palette、styleSheet、windowIcon、windowOpacity這七個屬性,基本都與部件的外觀相關。
6.一、palette屬性和字體font屬性設置
在Qt Designer的部件屬性中,有個部件調色板(palette)的屬性,進入後,以下圖所示:
Qt中提供的調色板palette用於管理控件的一組外觀顯示設置組成,組中每條記錄包括顏色角色、顏色組、具體顏色,對應PyQt中的QPalette類。QPalette類至關於對話框或控件的調色板,管理着控件和窗體的全部顏色。
6.1.一、color role顏色角色
上圖中藍色標記的color role顏色角色是指界面中顏色對應的部分界面外觀組合,又稱爲顏色職責,即對應界面中哪些部分使用指定某個顏色。經過枚舉變量QPalette.ColorRole來定義,取值及其含義以下:
6.1.二、顏色組ColorGroup
顏色組是指對應同一外觀組合在活動狀態(active,指得到焦點 ) 、非活動狀態(inactive,未得到焦點但能夠得到焦點的狀態 )、禁止狀態(disable,不能得到焦點 )時的對應顏色。上圖中只有active 狀態的,其餘兩種狀態顏色是電腦根據規則計算出來的,若是要查看或者設置顏色組的三種狀態,在上圖中選擇「show details」便可,以下圖:
上面兩個截圖中的預覽窗口是調整調色板的設置後對一個做爲案例的窗口外觀影響的預覽。
6.二、字體設置
在Qt Designer中部件的Font屬性中能夠設置對應部件的字體屬性,包括字體的字體簇(Family)、大小(Size)、是否粗體(Bold)、是否斜體(Italic)、是否帶下劃線(Underline)、是否帶刪除線(Strikeout)、是否調整字符間距(Kerning,調整字形間距,且基本上是英文字符形狀的間距,由於英文字符形狀都是不規則的,有寬有窄,有的圓乎乎,有的棱角分明,就會致使排列在一塊兒的時候疏密不一致,而kerning能夠有效利用字符形狀間的間隙,使字形之間的空間更加類似)、是否反走樣抗鋸齒(Antialiasing,請參考《QT QPainter::antialiasing QPainter::textAntialiasing 反走樣、抗鋸齒探究》)這些屬性。
注意:若是Qt Style Sheets與setFont()在同一個部件上使用,則若是設置衝突,樣式表將優先。
6.三、windowIcon屬性
windowIcon對象爲部件對象的屬性,但只有窗口對象有效,其餘派生對象如pushButtong對象無效。
在windowIcon對象上有以下子屬性設置:
這幾個子屬性其實是QIcon類中繼承的。它們的含義以下:
6.3.一、Theme(圖標主題):圖標主題是一組具備相同外觀和感受的圖標,從程序員的角度來看,圖標主題只是一個映射。給定一組要在其中查找圖標的目錄和一個主題名稱,它將圖標名稱和標稱圖標大小映射到圖標文件名。
關於圖標主題的內容老猿沒有弄清楚,猜想多是圖標文件和目錄以及大小有套規範,而後對應用指定主題,就能夠在主題對應目錄自動按照規範查找對應的圖標。
有幾個網址能夠參考一下:
《Icon Naming Specification》https://specifications.freedesktop.org/icon-naming-spec/icon-naming-spec-latest.html
《Icon Theme Specification》https://specifications.freedesktop.org/icon-theme-spec/icon-theme-spec-latest.html
6.3.二、Normal off…Selected On
上圖中所示的Normal off到Selected On這8個子屬性應該是QIcon的兩個屬性的組合,分別指定部件在這8種狀態下使用哪一個圖標。這兩個屬性分別是QIcon的以下兩個枚舉類型成員:
一、enum Mode { Normal, Disabled, Active, Selected }
四個值分別表示:
1)QIcon.Normal:部件爲使能狀態,但未激活,沒有得到焦點。
2)QIcon.Disabled:部件爲禁用狀態。
3)QIcon.Active:部件爲激活狀態,得到了焦點(如鼠標懸停在上面,或Tab鍵移動焦點)。
4)QIcon.Selected:部件被選中。
當部件的狀態切換時,默認的圖標繪製函數會自動根據部件的狀態重繪圖標。
二、enum State { Off, On }
某些部件還有所謂的開關狀態(好比一個按鈕能夠有按下和彈起兩個狀態),則還能夠根據 state 參數來選擇不一樣的圖像。
所以上述兩個類型的組合對應了8種狀態就是Designer圖標的8個子屬性。
注意:若是theme設置了,則優先使用theme去加載圖標,只有找不到的狀況下才使用下面每種狀態的圖標。
6.四、windowOpacity屬性
這個屬性僅對window對象生效。
windowOpacity爲浮點數,表示透明度,爲1徹底不透明,爲0徹底透明,缺省是1。
能夠經過windowOpacity()、setWindowOpacity(qreal level)進行讀取和設置。
6.五、layoutDirection屬性
layoutDirection屬性保存的是部件的佈局方向,有三個取值:
在部件上設置佈局方向時,它將傳播到部件的子級,但不會傳播到做爲窗口的子級,也不會傳播到已顯式調用setLayoutDirection()的子級。此外,爲父級調用setLayoutDirection()以後添加的子部件不會繼承父級的佈局方向。
在Qt Designer中修改了一個部件的佈局方向時,全部未單獨設置佈局方向的子部件的佈局方向所有跟隨調整,單獨設置了不跟隨調整。
注意:
一、自qt 4.7以來,此方法再也不影響文本佈局方向;
二、此屬性調整隻影響佈局內的部件排列,不影響絕對部件的部件排列;
三、佈局方向調整在Designer設計時當即生效,無需到運行時。
案例:
一、 以下圖,窗口布局類型爲從左到右,下面六個按鈕的排列顯示爲:
二、 調整窗口的佈局方向爲從右到左,則六個按鈕的排列顯示爲:
能夠看到一、 二、3號三個按鈕因爲是絕對佈局,兩種排列方向其界面上的順序沒有變化,而四、 五、 6在佈局中,兩種排列方向的按鈕順序顛倒了。
請注意:窗口的主菜單也靠右排列了。
6.六、 autoFillBackground屬性
autoFillBackground屬性能夠確認部件背景是否自動填充,若是自動填充,Qt會在調用Paint事件以前填充部件的背景。使用的顏色由部件調色板中的QPalette.window 顏色角色定義。
此外,除非設置了WA_OpaquePaintEvent 或 WA_NoSystemBackground屬性,不然窗口始終使用QPalette.Window對應顏色填充。
若是部件的父級對象背景具備靜態漸變,則沒法關閉此屬性(即不能設置爲False)。
警告:在使用Qt Style Sheets時請當心使用此屬性。當部件具備具備有效背景或邊框圖像的樣式表時,此屬性將自動禁用。
默認狀況下,此屬性爲False。
可使用autoFillBackground()和setAutoFillBackground(bool enabled)對該屬性進行讀取和設置。
6.7 styleSheet屬性
styleSheet屬性是定義部件外觀的屬性樣式表,在Qt中styleSheet樣式表是相似於html的css樣式同樣的方法,只是時專門爲Qt中的部件開發的。styleSheet的定義語法也是相似CSS,而且是跨平臺支持的。
因爲每一個部件均可以定義本身的樣式,也能夠經過QApplication.setStyleSheet()在整個應用程序上設置樣式。若是在不一樣級別設置了多個樣式表,qt將從全部設置的樣式表中派生出有效的樣式表。這叫作樣式級聯。
6.7.一、Qt Designer中定義樣式
在部件的styleSheet屬性中,點擊屬性進入屬性設置,會出現以下內容:
點擊省略號的按鈕,則進入樣式編輯器:
6.7.二、styleSheet樣式表
樣式表由一系列樣式規則組成。樣式規則由選擇器和聲明組成。選擇器指定哪些部件受規則影響;聲明指定應在部件上設置哪些屬性。如:
QPushButton { color: red }
在上面這個樣式規則中,QPushButton 是選擇器,{ color: red }就是聲明,表示全部QPushButton 按鈕及其派生類對象的文本顏色設置爲紅色。若是該規則樣式表應用在窗口上,則窗口上全部沒有指定styleSheet的pushButton部件的文字顏色會顯示爲紅色,經過styleSheet指定了color的則按本身指定顏色顯示。
上述截圖的窗口定義了樣式:QPushButton { color: red },而PushButton3則定義了樣式:QPushButton { color: blue},所以展現效果如上。
注意:在Qt樣式定義語句中,一般狀況下是大小寫均可以,但類名、對象名和Qt屬性名是大小寫敏感的。
所以QPushButton { color: red },也能夠寫成:QPushButton { Color: Red }、QPushButton { COLOR: RED}、QPushButton { Color: REd}等形式,但不能寫成qpushbutton { color: red }、QPUSHBUTTON { color: red }等形式。
關於Qt樣式表的詳細語法規則請見Qt文檔官網《The Style Sheet Syntax》。
可使用styleSheet() 、setStyleSheet(QString )來獲取或設置部件的樣式表。
終於將Qt Designer中與QWidget類相關的屬性介紹完了,從9月下旬開始學習PyQt的GUI程序開發,剛使用Qt Designer設計GUI界面時,對於桌面上那麼多控件一個個都不瞭解,處處找資料,基本沒有全面介紹界面控件的,單個的控件有些能找到一些內容,但都不夠詳細,有些根本就沒有。後來終於找到了Qt文檔官網的地址(https://doc.qt.io/qt-5/reference-overview.html),能解決將近80%的問題,但可能還有20%的問題解決不了,這20%總結來包括以下一些方面:
一、 在國內相對冷門且很差驗證的知識,如國際化、輸入法提示等;
二、 一些多是常識性的東西,沒有人解釋,官網上也沒有,但就是不理解,如焦點策略的鼠標滾輪得到焦點必選是鼠標已經在控件之上才行、what’s this怎麼觸發;
三、 一些英文怎麼翻譯纔好理解,如本節部分表格中有中英文對照的內容、Dock Wigdet是否該翻譯成停靠部件等;
四、 還有一些驗證時有時不成功有時不能成功的,如佈局控件內部件的從右往左對齊方向對主窗口菜單的影響試了幾回有不一樣的效果,也不知道緣由。
好歹通過多方查找各類資料、測試驗證,絕大部分問題都弄清楚了,可能還有極個別的沒有徹底理解透徹。從9月下旬開始,斷斷續續的未來源於QWidget類且在Qt Designer中屬性編輯可見的屬性的功用逐個再次總結記錄下來,又花了三天時間整理成本文的內容,並將這些屬性進行了分類。所以本文絕對不是簡單的翻譯或資料匯聚,是老猿先後花了近20天心血研究、整理的產物,還有少數幾個細節問題沒有徹底弄透徹,但就總體來講,對初學者應該是基本夠用了,但願幫助到你們。
博客地址:https://blog.csdn.net/LaoYuanPython
老猿Python博客文章目錄:http://www.javashuo.com/article/p-cwbwcpul-ct.html