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'
PySide中似乎没有{p> qstyleoption_cast
。如何将opt
转换为其子类,即PySide.QtGui.QStyleOptionTab
?
答案 0 :(得分: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转换为给定的子类。
答案 1 :(得分: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 ;)