Несколько QGraphicsViews и QGraphicsScenes в главном окне - PullRequest
0 голосов
/ 04 марта 2019

Я ищу разработку приложения Qt, основной / родительский виджет которого способен «содержать» один или несколько «специальных» виджетов.Каждый специальный виджет отображает отдельный QGraphicsView и QGraphicsScene.

Насколько я вижу, может быть только один центральный виджет, для которого может быть установлено графическое представление, т.е. QMainWindow::setCentralWidget( QGraphicsView ), тогда как я хотел бы иметь несколько графических представлений.

Здесьмоя неудачная быстрая и грязная попытка (в PySide)

#!/usr/bin/python

from PySide import QtGui
import sys

class MyApp(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        layout = QtGui.QHBoxLayout()

        self.scene1 = QtGui.QGraphicsScene(self)
        self.scene1.addRect(5,5,200,200)
        self.view1 = QtGui.QGraphicsView(self.scene1, self)

        self.scene2 = QtGui.QGraphicsScene(self)
        self.scene2.addLine(500,500,300,300)
        self.view2 = QtGui.QGraphicsView(self.scene1, self)

        layout.addWidget(self.view1)
        layout.addWidget(self.view2)

        self.setLayout(layout)
        self.show()

if __name__=="__main__":
    app=QtGui.QApplication(sys.argv)
    myapp = MyApp()
    sys.exit(app.exec_())

1 Ответ

0 голосов
/ 04 марта 2019

QMainWindow имеет макет по умолчанию, вам не нужно его устанавливать.В Qt QWidget может использоваться как контейнер, поэтому мы создаем виджет, который будет контейнером QGraphicsViews, а также centralwidget:

class MyApp(QtGui.QMainWindow):
    def __init__(self, parent=None):
        super(MyApp, self).__init__(parent)

        self.scene1 = QtGui.QGraphicsScene(self)
        self.scene1.addRect(5,5,200,200)
        self.view1 = QtGui.QGraphicsView(self.scene1)

        self.scene2 = QtGui.QGraphicsScene(self)
        self.scene2.addLine(500,500,300,300)
        self.view2 = QtGui.QGraphicsView(self.scene2)

        central_widget = QtGui.QWidget()
        layout = QtGui.QHBoxLayout(central_widget)
        layout.addWidget(self.view1)
        layout.addWidget(self.view2)
        self.setCentralWidget(central_widget)
        self.show()

enter image description here

...