QT和opencv學習(三)Qt訊號槽
阿新 • • 發佈:2019-01-27
所謂訊號槽,簡單來說,就像是插銷一樣:一個插頭和一個插座。怎麼說呢?當某種事件發生之後,比如,點選了一下滑鼠,或者按了某個按鍵,這時,這個元件就會發出一個訊號。就像是廣播一樣,如果有了事件,它就漫天發聲。這時,如果有一個槽,正好對應上這個訊號,那麼,這個槽的函式就會執行,也就是回撥。就像廣播發出了,如果你感興趣,那麼你就會對這個廣播有反應。程式碼如下:
#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()就是槽,形象地說就是把這個訊號插進這個槽裡面去。