如何制作具有指定大小的 QGraphicsScene 和 QGraphicsView 来监视具有相同大小的场景?
这听起来像是一个愚蠢的问题,但请考虑以下测试代码 [1]
import sys
from PyQt4 import QtGui, QtCore
class MainWindow(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.scene = QtGui.QGraphicsScene(0, 0, 200, 200, self)
self.view = QtGui.QGraphicsView(self.scene, self)
#self.view.setMaximumSize(200, 200)
self.setCentralWidget(self.view)
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
当我运行这个时,我得到一个带有 QGraphicsView 的小窗口,并且没有滚动条。如果我缩小窗口,则会出现滚动条,因为我使视图小于场景的指定大小。如果我放大窗口,条形图就会消失,并且视图会随着窗口的大小而调整。这一切都是有道理的。
现在我再次运行相同的代码,但注释行(前面带有#)未注释。窗口与内部视图一起出现,但视图有滚动条。当我缩小窗口时,视图也会缩小,但是当我放大窗口时,视图只会放大到一定大小。这并不奇怪。什么is令人惊讶的是,当视图达到最大尺寸时,滚动条仍然存在。我不明白这一点,因为视图的最大尺寸与代码中场景的尺寸明确匹配。
为什么会出现这种情况?
我知道其他问题已经解释了如何强制场景和视图组合在一起,但我想了解我实际制作的视图和场景的尺寸,因此我尝试使用明确指定的尺寸。
[1] 我正在使用 PyQt,C++ 用户只需将“self”读为“this”,将“import”读为“#include”
编辑:下面接受的答案是绝对正确的。我想为阅读本文的其他人补充一点,如果您的视图位于布局中,您还必须考虑布局边距。这些可以在 QtDesigner 等中显式设置。