1. 程式人生 > >QT和opencv學習(三)Qt訊號槽

QT和opencv學習(三)Qt訊號槽

所謂訊號槽,簡單來說,就像是插銷一樣:一個插頭和一個插座。怎麼說呢?當某種事件發生之後,比如,點選了一下滑鼠,或者按了某個按鍵,這時,這個元件就會發出一個訊號。就像是廣播一樣,如果有了事件,它就漫天發聲。這時,如果有一個槽,正好對應上這個訊號,那麼,這個槽的函式就會執行,也就是回撥。就像廣播發出了,如果你感興趣,那麼你就會對這個廣播有反應。程式碼如下:

#include <QtGui/QApplication> 
#include <QtGui/QPushButton> 
 
int main(int argc, char *argv[]) 
{ 
        QApplication a(argc, argv); 
        QPushButton *button = new QPushButton("Quit"); 
        QObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit())); 
        button->show(); 
        return a.exec(); 
}

這是在Qt Creator上面新建的檔案,因為前面已經詳細的說明怎麼新建工程,所以這裡就不再贅述了。這個程式很簡單,只有一個按鈕,點選之後程式退出。

QObject::connect(button, SIGNAL(clicked()), &a, SLOT(quit()));

QObject是所有類的根。Qt使用這個QObject實現了一個單根繼承的C++。它裡面有一個connect靜態函式,用於連線訊號槽。

當一個按鈕被點選時,它會發出一個clicked訊號,意思是,向周圍的元件們宣告:我被點選啦!當然,其它很多元件都懶得理他。如果對它感興趣,就告訴QObject說,你幫我盯著點,只要button發出clicked訊號,你就告訴我——想了想之後,說,算了,你也別告訴我了,直接去執行我的某某某函式吧!就這樣,一個訊號槽就形成了。具體來說呢,這個例子就是QApplication的例項a說,如果button發出了clicked訊號,你就去執行我的quit函式。所以,當我們點選button的時候,a的quit函式被呼叫,程式退出了。所以,在這裡,clicked()就是一個訊號,而quit()就是槽,形象地說就是把這個訊號插進這個槽裡面去。