Автоматическое изменение размера текста ярлыка в Qt - странное поведение

В Qt у меня есть составной виджет, который состоит из нескольких QLabels, расположенных внутри QBoxLayouts. Когда виджет изменяется в размерах, я хочу, чтобы текст метки масштабировался, чтобы заполнить область метки, и я реализовал изменение размера текста в событии resizeEvent.

Это работает, но кажется, что происходит какая-то петля обратной связи. Составной виджет размещен в главном окне внутри QBoxLayout вместе с некоторыми другими виджетами. Когда главное окно уменьшается, составной виджет сначала сохраняет свой размер, а затем изменяет размер в сторону правильного размера в несколько этапов (примерно 10-15). Если высота текста установлена более чем в 0,8 раза больше высоты ярлыка, то при изменении размера текст и содержащий его виджет увеличиваются с каждым шагом, пока в конечном итоге приложение не завершает работу.

Правильный ли это подход для достижения такого эффекта? Если да, то в чем может быть проблема с изменением размера?

Ниже приведен код resizeEvent.

def resizeEvent(self, evt):
        print("resizeEvent", evt.size().width(), evt.size().height())
        QFrame.resizeEvent(self, evt)

        dataLabels = self.dataPanels.values()

        for label in dataLabels:            
            font = label.font()
            h = label.height()
            h2 = h * 0.8
            font.setPixelSize(h2)
            label.setFont(font)

(используя PyQt4 4.8, Qt 4.7.4, Win 7 и OSX 10.6)

8
задан glennr 9 January 2012 в 22:58
поделиться