Поддержка индивидуальных стилей в PySide, как привести QStyleOption к его подклассу? - PullRequest
1 голос
/ 22 августа 2011
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?

Ответы [ 2 ]

0 голосов
/ 11 октября 2012

нашел небольшое решение в стиле hack.

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 ;)
0 голосов
/ 09 декабря 2011
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 в данный подкласс.

...