2017-09-05 10 views
0

QtCheckBoxをトライステートに設定して、状態が部分的になっているときにXをチェックボックスに描画しようとしています。私は現在、Qtがオペレーティングシステムと一致するようにスタイルを処理させています。そのようにしておき、チェックボックスの描画方法を変更したいと思います。PyQt4のシステムスタイルを変更する

私はQtで使用されているQStyleをオーバーライドすることでこれを実行しようとしています。私はQtは、デフォルトで使用していたスタイルテスト:

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

をしかし、私はapp.setStyle(QtGui.QCommonStyle())を実行しようとすると、GUIの変更は、最も顕著なチェックマークがQCheckBox ESから消えます。

私はQCommonStyleを検索し、ドキュメントに基づいて、すべてのスタイルに共通の要素のみを描画します。使用されるスタイルは、実際にQCommonStyleではないと思われるとき、

  1. はなぜtype(app.style())QCommonStyle返している:

    だから私は2つの質問がありますか?

  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 
関連する問題