2016-09-17 3 views
0

지난 며칠 동안 위젯 이동 문제를 해결하려고했습니다. 어떤 시점에서 마우스 신호로 QComboBox 클래스를 다시 작성하려고 시도했지만 작동하지 않았습니다. 주위의 해결 방법으로 QGraphicsWidget에 내 위젯을 양육했지만 일단 다른 항목을 추가하려고하면 더 이상 표시되지 않으며 무엇을해야할지 모르겠습니다.QGraphicsview + scene + QGroupBox 이동 문제

from PyQt4 import QtGui, QtCore 
from PyQt4.QtGui import QApplication,QGraphicsItem, QGraphicsView, QGraphicsScene, QDesktopWidget, QCheckBox, QGroupBox, QPushButton, QGridLayout, QLabel, QLineEdit, QComboBox, QFont, QRadioButton, QButtonGroup, QWidget, QShortcut, QKeySequence, QIcon, QListView, QStandardItemModel, QStandardItem, QAction, QIntValidator, QListWidget, QProgressBar, QSpacerItem 
from PyQt4.QtCore import QRect 
from functools import partial 
import sys 

class node_GUI(QtGui.QWidget): 
    def __init__(self): 
     super(node_GUI, self).__init__() 



class Main(QtGui.QMainWindow): 
    def __init__(self, *args): 
     super(Main, self).__init__(*args)#QtGui.QMainWindow.__init__(self) 
     self.init_defaults() 
    def init_defaults(self): 
     self.setGeometry(800,800,500,200) 
     self.lay_main = QGridLayout() 
     self.centralwidget = QtGui.QWidget() 
     self.centralwidget.setLayout(self.lay_main) 
     self.setCentralWidget(self.centralwidget) 

     btn_create_node = QPushButton("Create Node View") 
     btn_create_node.clicked.connect(self.create_node_view) 
     self.lay_main.addWidget(btn_create_node) 

    def showWindow(self,window): 
     window.show() 

    def printTest(self): 
     print "Start" 
     box = QGroupBox("subWidget") 
     box_btn = QPushButton("Test") 
     box_btn.clicked.connect(self.printTest) 
     le_edit = QLineEdit() 
     lay = QGridLayout() 
     box.setLayout(lay) 
     lay.addWidget(box_btn) 
     lay.addWidget(le_edit) 

     area = QtGui.QGraphicsWidget() 
     area.setMinimumSize(QtCore.QSizeF(400,300)) 
     area.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True) 
     area.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True) 

     proxy = self.scene.addWidget(box) 
     proxy.setParentItem(area) 

     print "END" 
    def create_node_view(self): 
     print "creting node view" 
     window = node_GUI() 
     window.setGeometry(QRect(100, 100, 400, 200)) 
     window.setWindowTitle("node ") 
     window.setObjectName("node") 
     show_window = QPushButton("Show Node Editor") 
     show_window.setObjectName("btn") 
     show_window.clicked.connect(partial(self.showWindow,window)) 
     self.lay_main.addWidget(show_window) 

     box = QGroupBox("Widgets") 
     box_btn = QPushButton("Test") 
     box_btn.clicked.connect(self.printTest) 
     le_edit = QLineEdit() 
     lay = QGridLayout() 
     box.setLayout(lay) 
     lay.addWidget(box_btn) 
     lay.addWidget(le_edit) 

     area = QtGui.QGraphicsWidget() 
     area.setMinimumSize(QtCore.QSizeF(300,300)) 
     area.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True) 
     area.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True) 
     area.setAutoFillBackground(True) 

     ecs = QtGui.QGraphicsEllipseItem() 
     ecs.setRect(QtCore.QRectF(79,79,79,79)) 
     ecs.setFlag(QtGui.QGraphicsItem.ItemIsMovable, True) 
     ecs.setFlag(QtGui.QGraphicsItem.ItemIsSelectable, True) 

     view = QGraphicsView() 
     self.scene = QGraphicsScene() 
     self.scene.addItem(area) 
     proxy = self.scene.addWidget(box) 
     proxy.setParentItem(area) 

     self.scene.addItem(ecs) 
     view.setScene(self.scene) 

     lay_window = QGridLayout() 
     window.setLayout(lay_window) 
     lay_window.addWidget(view) 


def main(): 
    app = QtGui.QApplication(sys.argv) 
    main = Main() 
    main.show() 
    sys.exit(app.exec_()) 


if __name__ == "__main__": 
    main() 

노드보기 만들기> 노드 편집기 표시> 테스트 버튼> 새 그룹 상자가 나타나야하지만 작동하지 않습니다. 이유를 모르겠다.

답변

0

맞아요. QGraphicsWidget()을 사용하지 않고 대신 QGraphicsRectItem (예 : ecs)을 사용합니다. 일단 변경 사항을 적용하면 모든 것이 예상대로 작동하기 시작했습니다.

+0

편집 비트. groupBox로 끌면 위젯 끌기가 작동하지 않지만 GraphicsItem 만 사용하면 any1이 groupBox에서 parent로 드래그 이벤트를 드래그하여 뷰로 끌 수 있음을 알 수 있습니까? – Dariusz

관련 문제