2017-09-05 3 views
0

Ich versuche, QtCheckBox mit aktiviertem Tristate ein X in das Kontrollkästchen zu zeichnen, wenn der Status teilweise ist. Ich lasse momentan Qt den Stil behandeln, so dass es dem Betriebssystem entspricht, und ich möchte es so behalten und nur die Art, wie das Kontrollkästchen gezeichnet wird, ändern.Ändern des Systemstils in PyQt4

Ich habe versucht, dies durch Überschreiben der von Qt verwendeten QStyle zu tun. Getestet habe ich den Stil, dass Qt standardmäßig wurde mit:

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

Aber wenn ich app.setStyle(QtGui.QCommonStyle()) versuchen, gibt die GUI-Änderungen, insbesondere die Häkchen verschwinden aus dem QCheckBox es.

Ich schaute QCommonStyle, und basierend auf der Dokumentation zeichnet es nur die Elemente, die allen Stilen gemeinsam sind.

So habe ich zwei Fragen:

  1. Warum type(app.style())QCommonStyle zurückkehrt, wenn es scheint, dass der Stil verwendet wird, ist QCommonStyle eigentlich nicht?
  2. Wie bekomme ich eigentlich den Stil von Qt verwendet?

Ich benutze PyQt4.

Antwort

2

Warum ist Typ (app.style()) Rückkehr QCommonStyle, wenn es scheint, dass verwendete Stil ist eigentlich nicht QCommonStyle?

Die Klassen, die zum Beispiel in meinem Fall wie Stil erben verwendet werden, habe ich die folgenden Stile im Allgemeinen von QCommonStyle,:

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

Ausgang:

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'> 

Und wie wir beobachten alle sind von diesem Typ.

Wie bekomme ich eigentlich den Stil von Qt verwendet?

Es bereits im vorherigen Teil beantwortet wird:

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

In meinem Fall:

Adwaita::Style