2017-05-28 130 views
0

我有這樣的畫面:如何使QGraphicsView在繪製超出其大小的線時增加其大小?

enter image description here

就可以了我畫一條線,就走出了板:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sys 
from PyQt4 import QtGui, QtCore 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 
     self.initUI() 

    def initUI(self): 
     self.drawingPanel = DrawingPanel(self) 

     verticalLayout = QtGui.QVBoxLayout(self) 
     verticalLayout.addWidget(self.drawingPanel) 

     self.setLayout(verticalLayout) 
     # self.setGeometry(300, 300, 400, 300) 
     self.resize(400, 300) 

     self.setWindowTitle('Review') 
     self.show() 


class DrawingPanel(QtGui.QGraphicsView): 

    def __init__(self, parent): 
     QtGui.QGraphicsView.__init__(self, parent) 
     self.setScene(QtGui.QGraphicsScene(self)) 
     self.setSceneRect(QtCore.QRectF(self.viewport().rect())) 

     # self.setSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Maximum) 

     pencil = QtGui.QPen(QtCore.Qt.black, 2, QtCore.Qt.SolidLine) 
     pencil.setStyle(QtCore.Qt.DotLine) 

     self.scene().addLine(QtCore.QLineF(0, 0, 300, 600), pencil) 


def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main() 

如何使面板創建一個滾動條,能夠證明整個畫線?

我能找到一些其他問題:

  1. QGraphicsView/QGraphicsScene size matching
  2. QGraphicsView/QGraphicsScene image size
+0

在C++中,我使用這樣的東西:view.fitInView(scene.itemsBoundingRect()); – ni1ight

+0

此外,這可以幫助你:https://stackoverflow.com/questions/19434019/qgraphicsview-qgraphicsscene-size-matching?noredirect=1&lq=1 – ni1ight

+0

謝謝,但我希望面板允許滾動條。目前,該圖形如圖所示。 – user

回答

0

我固定它只是刪除該行從代碼:

self.setSceneRect(QtCore.QRectF(self.viewport().rect())) 

enter image description here

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

import sys 
from PyQt4 import QtGui, QtCore 

class Example(QtGui.QWidget): 

    def __init__(self): 
     super(Example, self).__init__() 
     self.initUI() 

    def initUI(self): 
     self.drawingPanel = DrawingPanel(self) 

     verticalLayout = QtGui.QVBoxLayout(self) 
     verticalLayout.addWidget(self.drawingPanel) 

     self.setLayout(verticalLayout) 
     # self.setGeometry(300, 300, 400, 300) 
     self.resize(400, 300) 

     self.setWindowTitle('Review') 
     self.show() 


class DrawingPanel(QtGui.QGraphicsView): 

    def __init__(self, parent): 
     super(DrawingPanel, self).__init__(parent) 

     scene = QtGui.QGraphicsScene() 
     self.setScene(scene) 

     # self.setSceneRect(QtCore.QRectF(self.viewport().rect())) 
     # self.setSizePolicy(QtGui.QSizePolicy.Maximum, QtGui.QSizePolicy.Maximum) 

     pencil = QtGui.QPen(QtCore.Qt.black, 2, QtCore.Qt.SolidLine) 
     pencil.setStyle(QtCore.Qt.DotLine) 

     self.scene().addLine(QtCore.QLineF(0, 0, 300, 600), pencil) 


def main(): 

    app = QtGui.QApplication(sys.argv) 
    ex = Example() 
    sys.exit(app.exec_()) 


if __name__ == '__main__': 
    main()