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_cast在 PySide 中似乎不可用。我怎样才能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 中没有“强制转换”的概念。cast 的概念适用于静态类型语言。我不太确定如何解释 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 回答