【发布时间】:2012-02-06 10:59:06
【问题描述】:
在 Qt 中,我有一个复合小部件,它由排列在 QBoxLayouts 内的几个 QLabels 组成。当小部件调整大小时,我希望标签文本缩放以填充标签区域,并且我已经在 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)
【问题讨论】: