天天看點

QT-GraphicScene大于GraphicView時,場景居中問題

使用環境:

PySide2 + QT5.12.8 + Python3.7 + Windows10

QT或者PyQt解決思路類似。

問題描述:

由于項目需要,場景需要較大的區域,是以初始化時,場景的面積大于視圖視窗的面積,這種情況下,會出現滾動條,且軟體會預設将視圖聚焦與場景中間,而不是左上角,不符合通常的軟體操作習慣,是以需要設定将視圖視窗聚焦于場景左上角。

解決方案:

下述代碼僅作參考,關鍵代碼為

self.graphView.centerOn(0, 0)

,通過這句代碼将視圖中心設定為左上角。

from PySide2.QtWidgets import QApplication, QMainWindow, QGraphicsScene, QGraphicsView

class UIMainWindow(QMainWindow):
    def __init__(self, *args, **kwargs):
        super(UIMainWindow, self).__init__(*args, **kwargs)
        self.showMaximized()  # 最大化視窗
        self.graphView = QGraphicsView(self)  # 視圖視窗大小小于視窗大小
        self.graphScene = QGraphicsScene()
        self.desktop = QtWidgets.QApplication.desktop()
        self.setSceneRect(0, 0, self.desktop.width() * 1.2, self.desktop.height() * 1.2)  # 設定場景範圍,令其大于視窗大小
        self.graphView.setScene(self.graphScene)
        # 下面這句代碼必須在上行代碼之後,否則無效
        self.graphView.centerOn(0, 0)  # 在設定好場景後,将view視圖中心設定為左上角
		self.setCentralWidget(self.graphView)

……
           

參考文獻

[1] QGraphicsView大于QGraphicsScene時出現滾動條時,改變scene的顯示位置

以上,歡迎交流。