2017-09-05 50 views
0

我試圖讓QtCheckBox在啓用tristate的狀態爲部分時在複選框中繪製一個X.我現在讓Qt處理風格,使其與操作系統相匹配,我想保持這種狀態,只改變複選框的繪製方式。在PyQt4中修改系統風格

我一直在試圖通過覆蓋Qt使用的QStyle來做到這一點。我測試了Qt的使用默認的樣式:

>>> app = QtGui.QApplication() 
>>> type(app.style()) 
PyQt4.QtGui.QCommonStyle 

但是,當我嘗試運行app.setStyle(QtGui.QCommonStyle()),圖形用戶界面的變化,最明顯的是查馬克從QCheckBox ES消失。

我擡頭看QCommonStyle,並根據文檔只繪製了所有樣式通用的元素。

所以我有兩個問題:

  1. 爲什麼type(app.style())返回QCommonStyle,當它出現,所使用的風格其實並不是QCommonStyle
  2. 我該如何獲得Qt使用的風格?

我正在使用PyQt4。

回答

2

爲什麼類型(app.style())返回QCommonStyle,當它出現的是 使用的樣式其實並不QCommonStyle?

被用來般的風格繼承一般QCommonStyle,例如在我的情況的類,我有以下樣式:

for key in QtGui.QStyleFactory.keys(): 
    st = QtGui.QStyleFactory.create(key) 
    print(key, st.metaObject().className(), type(app.style())) 

輸出:

Adwaita-Dark Adwaita::Style <class 'PyQt4.QtGui.QCommonStyle'> 
Adwaita  Adwaita::Style <class 'PyQt4.QtGui.QCommonStyle'> 
Breeze  Breeze::Style <class 'PyQt4.QtGui.QCommonStyle'> 
bb10dark  QBB10DarkStyle <class 'PyQt4.QtGui.QCommonStyle'> 
bb10bright QBB10BrightStyle <class 'PyQt4.QtGui.QCommonStyle'> 
cleanlooks QCleanlooksStyle <class 'PyQt4.QtGui.QCommonStyle'> 
gtk2   QGtkStyle  <class 'PyQt4.QtGui.QCommonStyle'> 
cde   QCDEStyle  <class 'PyQt4.QtGui.QCommonStyle'> 
motif  QMotifStyle  <class 'PyQt4.QtGui.QCommonStyle'> 
plastique QPlastiqueStyle <class 'PyQt4.QtGui.QCommonStyle'> 
qt5ct-style Qt5CTProxyStyle <class 'PyQt4.QtGui.QCommonStyle'> 
QtCurve  QtCurve::Style <class 'PyQt4.QtGui.QCommonStyle'> 
Windows  QWindowsStyle <class 'PyQt4.QtGui.QCommonStyle'> 
Fusion  QFusionStyle  <class 'PyQt4.QtGui.QCommonStyle'> 

當我們遵守所有屬於那種類型。

我該如何獲得Qt使用的風格?

它在前面部分已經回答:

print(QtGui.QApplication.style().metaObject().className()) 

在我的情況:

Adwaita::Style