槽在Qt的C++類中是private slots,是一種函式類型。
槽是普通的 C++ 成員函式,可以被正常調用,它們唯一的特殊性就是很多信號可以與其相關聯。當與其關聯的信號被發射時,這個槽就會被調用。槽可以有參數,但槽的參數不能有預設值。。
基本介紹
- 中文名:槽
- 外文名:public slots、private slots 和 protected slots。
槽
- public slots:在這個區內聲明的槽意味著任何對象都可將信號與之相連線。這對於組件編程非常有用,你可以創建彼此互不了解的對象,將它們的信號與槽進行連線以便信息能夠正確的傳遞。
- protected slots:在這個區內聲明的槽意味著當前類及其子類可以將信號與之相連線。這適用於那些槽,它們是類實現的一部分,但是其界面接口卻面向外部。
- private slots:在這個區內聲明的槽意味著只有類自己可以將信號與之相連線。這適用於聯繫非常緊密的類。
1 2 3 4 | public slots: void mySlot(); void mySlot(int x); void mySignalParam(int x,int y); |
程式樣例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | //tsignal.h ... class TsignalApp:public QMainWindow { Q_OBJECT ... // 信號聲明區 signals: // 聲明信號 mySignal() void mySignal(); // 聲明信號 mySignal(int) void mySignal(int x); // 聲明信號 mySignalParam(int,int) void mySignalParam(int x,int y); // 槽聲明區 public slots: // 聲明槽函式 mySlot() void mySlot(); // 聲明槽函式 mySlot(int) void mySlot(int x); // 聲明槽函式 mySignalParam (int,int) void mySignalParam(int x,int y); } ... //tsignal.cpp ... TsignalApp::TsignalApp() { ... // 將信號 mySignal() 與槽 mySlot() 相關聯 connect(this,SIGNAL(mySignal()),SLOT(mySlot())); // 將信號 mySignal(int) 與槽 mySlot(int) 相關聯 connect(this,SIGNAL(mySignal(int)),SLOT(mySlot(int))); // 將信號 mySignalParam(int,int) 與槽 mySlotParam(int,int) 相關聯 connect(this,SIGNAL(mySignalParam(int,int)),SLOT(mySlotParam(int,int))); } // 定義槽函式 mySlot() void TsignalApp::mySlot() { QMessageBox::about(this,"Tsignal", "This is a signal/slot sample without parameter."); } // 定義槽函式 mySlot(int) void TsignalApp::mySlot(int x) { QMessageBox::about(this,"Tsignal", "This is a signal/slot sample with one parameter."); } // 定義槽函式 mySlotParam(int,int) void TsignalApp::mySlotParam(int x,int y) { char s[256]; sprintf(s,"x:%d y:%d",x,y); QMessageBox::about(this,"Tsignal", s); } void TsignalApp::slotFileNew() { // 發射信號 mySignal() emit mySignal(); // 發射信號 mySignal(int) emit mySignal(5); // 發射信號 mySignalParam(5,100) emit mySignalParam(5,100); } |