crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Чёрная дыра в PySide
Litkevich Yuriy
  опции профиля:
сообщение 15.11.2010, 3:23
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Никак не могу победить одно место в программе, такое ощущение, что там где-то врата в четвёртое измерение.

Вот код:
class Qt5WayButton(QWidget):
    def __init__(self, parent = None):
        QWidget.__init__(self, parent)
        sp = QSizePolicy()
        sp.setHeightForWidth(True)
        self.setSizePolicy(sp)

        grid = QGridLayout(self)
        grid.setMargin(0)
        grid.setSpacing(0)

        self.m_upButton = NavigationButton(self)
        self.m_downButton = NavigationButton(self)
        self.m_leftButton = NavigationButton(self)
        self.m_rightButton = NavigationButton(self)
        self.m_centerButton = NavigationButton(self)

        grid.addWidget(self.m_upButton, 0, 0, 1, 2)
        grid.addWidget(self.m_downButton, 1, 0, 1, 2)
        grid.addWidget(self.m_leftButton, 0, 0, 2, 1)
        grid.addWidget(self.m_rightButton, 0, 1, 2, 1)
        grid.addWidget(self.m_centerButton, 0, 0, 2, 2)

        self.m_rendererBase = QtSvgPixmapCache(self)

# ...

    def resizeEvent(self, event):
        print "Qt5WayButton.resizeEvent"
        # update masks
        self.m_upButton.updateMask()
        self.m_downButton.updateMask()
        self.m_leftButton.updateMask()
        self.m_rightButton.updateMask()
        self.m_centerButton.updateMask()
        QWidget.resizeEvent(self, event)
    
    def paintEvent(self, event):
        print "Qt5WayButton.paintEvent, before", event
        QWidget.paintEvent(self, event)
        print "Qt5WayButton.paintEvent, after", event
        painter = QPainter(self)
        self.m_rendererBase.render(painter, self.m_centerButton.geometry())
        self.m_upButton.paint(painter)
        print "Qt5WayButton.paintEvent, m_upButton", self.m_upButton
        self.m_downButton.paint(painter)
        print "Qt5WayButton.paintEvent, m_downButton", self.m_downButton
        self.m_leftButton.paint(painter)
        print "Qt5WayButton.paintEvent, m_leftButton", self.m_leftButton
        self.m_rightButton.paint(painter)
        print "Qt5WayButton.paintEvent, m_rightButton", self.m_rightButton
        self.m_centerButton.paint(painter)
        print "Qt5WayButton.paintEvent, m_centerButton", self.m_centerButton
а в консоль печатается:
__init__ in src
__init__ in src\qt5waybutton
__init__ in src\common
__init__ in skin
Qt5WayButton.resizeEvent
Qt5WayButton.paintEvent, before <PySide.QtGui.QPaintEvent object at 0x017F6940>
Qt5WayButton.paintEvent, after <PySide.QtGui.QPaintEvent object at 0x017F6940>
Qt5WayButton.paintEvent, m_upButton <src.qt5waybutton.navigationbutton.NavigationButton object at 0x017F0A20>
Qt5WayButton.paintEvent, m_downButton <src.qt5waybutton.navigationbutton.NavigationButton object at 0x017F0AE0>
Qt5WayButton.paintEvent, m_leftButton <src.qt5waybutton.navigationbutton.NavigationButton object at 0x017F0BA0>
Qt5WayButton.paintEvent, m_rightButton <src.qt5waybutton.navigationbutton.NavigationButton object at 0x017F0C60>
Qt5WayButton.paintEvent, m_centerButton <src.qt5waybutton.navigationbutton.NavigationButton object at 0x017F0D20>
Qt5WayButton.paintEvent, before <PySide.QtGui.QPaintEvent object at 0x017F6960>
Qt5WayButton.paintEvent, before <PySide.QtGui.QPaintEvent object at 0x017F6980>
Qt5WayButton.paintEvent, before <PySide.QtGui.QPaintEvent object at 0x017F6940>
Qt5WayButton.paintEvent, before <PySide.QtGui.QPaintEvent object at 0x017F68A0>
Т.е. в первый раз управление проходит строчку
QWidget.paintEvent(self, event)
но во все последующие - нет. Однако как попадает в событие рисования опять (не вешается) я не понимаю.
событие изменения размера не происходит ни когда (кроме первого раза), но окошко растягивается, другие виджеты работают нормально.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.5.2011, 13:53
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


в версии PySide 1.0.0 такого не наблюдается.

Однако Питон странный зверь, прога не работает, но в тоже время работает :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


3 чел. читают эту тему (гостей: 3, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.12.2024, 4:45