【发布时间】:2012-05-23 07:09:08
【问题描述】:
我正在使用 PyQt4 和 python-popplerqt4 开发 PDF 阅读器。 PDF 页面(QPixmaps)显示在 QLables 中,在 QFrame 中垂直布局。 QFrame 被放置在 QScrollArea 中。
QMainWindow
|_ QScrollArea
|_ QFrame (Document: stretch)
|_ QLabel (Page: fixed size)
| |_ QPixmap (stretch)
|_ QLabel
| |_ QPixmap
|_ etc.
文档的大小由 QLabels 的固定大小决定。 QPixmap 被设置为相应地拉伸,页面周围的 QFrame 自然地调整其大小。
当我要求缩放时,页面(QLabels)会用QLabel.setFixedSize() 一张一张地调整大小。然而效果是令人失望:调整文档大小看起来摇摇晃晃。相比之下,放大 Evince 或 Mendeley 真的很流畅。
我在其他地方读到过在缩放之前调用 QFrame.hide() 和在缩放之后调用 QFrame.show() 会有所帮助。事实上,它适用于一个小文件。但是,例如,应用于大约 700 页的 PDF 意味着 空白 QScrollArea 超过一秒钟。不好。
如何在 QScrollArea 中缩放文档并产生平滑的缩放效果?
PS: Poppler.Pages 的图像仅为可见的 QLabel 收件人绘制。即调整 700 页文档的大小并不涉及调整那么多图像的大小。实际上,它最多会调整 2 到 4 个图像的大小(并且分辨率越多,分辨率越小)。然后调整 Document 对象的大小仅包括调整 QLabels 的大小,大部分是空的。
【问题讨论】:
-
我删除了应用动画的部分。它无法工作,因为我的示例需要 QLabels 上的 setFixedSize(),这与通过动画更改大小值相冲突。
标签: python qt4 zooming pyqt4 qscrollarea