2010-04-12 61 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