2010-04-12 88 views
3

前一段时间,我在Qt for C++中做了一些工作;现在我正在使用PyQt。正确使用PyQt信号

我有一个QStackedWidget的子类,里面有一个QWidget的子类。在QWidget中,我想单击一个按钮进入QStackedWidget的下一页。我的(简化的)的方法如下:

class Stacked(QtGui.QStackedWidget): 
    def __init__(self, parent=None): 
     QtGui.QStackedWidget.__init__(self, parent) 
     self.widget1 = EventsPage() 
     self.widget1.nextPage.connect(self.nextPage) 
     self.widget2 = MyWidget() 
     self.addWidget(self.widget1) 
     self.addWidget(self.widget2) 

    def nextPage(self): 
     self.setCurrentIndex(self.currentIndex() + 1) 


class EventsPage(QtGui.QWidget): 
    nextPage = QtCore.pyqtSignal() 

    def __init__(self, parent=None): 
     QtGui.QWidget.__init__(self, parent) 
     self.continueButton = QtGui.QPushButton('Continue') 
     self.continueButton.clicked.connect(self.nextPage) 

所以,基本上,我的continueButton clicked信号连接到EventsPage nextPage信号,其我然后在堆叠到nextPage方法连接。我可以深入研究Stacked内部的EventsPage,并连接self.widget1.continueButton.clicked,但这似乎完全击败了信号和插槽的目的。

那么这种方法是有意义的,还是有更好的方法?

回答

6

不,这很有道理。想象一下人们从建筑物顶部飘扬的信号。他们不想过马路(所有的楼梯...),所以他们看着其他建筑物上的其他人在做什么。这样,没有人必须关心建筑物内部发生了什么。

+0

+1尼斯类比:) – Skilldrick 2010-04-12 13:15:56