1
class VisualStyle(QCleanlooksStyle):
    def drawControl(self, ce, opt, p, w):
        if ce == QStyle.CE_TabBarTabShape:
            print(opt.__class__) # opt is always the type 'PySide.QtGui.QStyleOption'

qstyleoption_castPySide では利用できないようです。optサブクラスにキャストするにはどうすればよいPySide.QtGui.QStyleOptionTabですか?

4

2 に答える 2

0
myStyleOptionTab = QStyleOptionTab(opt)

PySide ドキュメントからの別の例:

def drawPrimitive(self, element, option, painter, widget):
    if element == self.PE_FrameFocusRect:
        focusRectOption =  QStyleOptionFocusRect(option)
        if focusRectOption:
            # ...

PySide のドキュメントは、魔法のように C++ のドキュメントから派生しているため、多少文字化けしていますか? しかし、通常、例の Python コードは正しいのでしょうか?

Python には「キャスト」という概念はありません。キャストの概念は、静的に型付けされた言語用です。PySide が QStyleOption で何をしているのかを説明する方法がよくわかりません。とにかく、クラス (QStyleOptionTab(opt) など) を呼び出してインスタンスを作成すると、指定されたインスタンスが「正しい型」であり、型が C++ の型の概念であることが確認されます。または、スーパークラス QStyleOption から指定されたサブクラスに変換します。

于 2011-12-09T14:17:31.537 に答える
0

少しハックスタイルの解決策を見つけました。

def drawPrimitive(self, element, option, painter, widget):
    if element == self.PE_FrameFocusRect:
        opt = QStyleOptionFocusRect()
        widget.initStyleOption(opt) # this is private, but python has no private methods ;)
于 2012-10-11T15:34:27.280 に答える