6.QT信号和槽
新建項目SignalAndSlot項目
編寫代碼如下:
| mysignal.h |
| #ifndef MYSIGNAL_H #define MYSIGNAL_H ? #include <QObject> ? class MySignal : public QObject { ??? Q_OBJECT public: ??? explicit MySignal(QObject *parent = 0); ? signals: ??? void sig(); ? public slots: ? }; ? #endif |
| mysignal.cpp |
| #include "mysignal.h" ? MySignal::MySignal(QObject *parent) : ??? QObject(parent) { } |
| myslot.h |
| ??????? #ifndef MYSLOT_H #define MYSLOT_H ? #include <QObject> ? class MySlot : public QObject { ??? Q_OBJECT public: ??? explicit MySlot(QObject *parent = 0); ? signals: ? public slots: ??? void slot(); ? }; ? #endif // MYSLOT_H |
| myslot.cpp |
| #include "myslot.h" #include <QDebug> ? MySlot::MySlot(QObject *parent) : ??? QObject(parent) { } ? void MySlot::slot() { ??? qDebug() << "MySlot::slot is called"; } |
| Main.cpp |
| #include <QCoreApplication> #include "mysignal.h" #include "myslot.h" ? /* *1)信號的定義必須在signals:保留字下,并且不需要實現 *2)槽的定義必須在slots:保留字下,需要實現 *3)信號和槽通過QObject::connect函數連接 *4)當信號被觸發是,槽函數被調用 * *需要注意的是: *1) 信號的定義必須在signals:保留字下,并且不需要實現 *2)槽的定義必須在slots:保留字下,需要實現 *3)信號和槽通過QObject::connect函數連接 *4)當信號被觸發時,槽函數被調用 * *需要注意的是: *1)信號和槽,是QT的拓展,所以實現信號和槽的類,必須是QObject的子類 *2)實現信號和槽的類,必須以宏Q_OBJECT開始 *3)連接信號和槽,要用到SIGNAL和SLOT宏,轉換函數為字符串 *4)一個信號可以和多個槽連接,槽函數調用的順序是不確定的 *5)多個信號可以同時連接一個槽 *6)信號可以連接信號,形成信號傳導 *7)信號和槽的參數應該一樣多,而且類型必須相同 *8)信號和槽都可以重載 *9)信號和槽都可以有默認參數 *10)槽函數可以像普通函數一樣被調用 *11)在槽函數中,調用sender可以獲得信號調用者 * * 總結下: * 一個類:QObject * 三個宏:Q_OBJECT SIGNAL SLOT * 三個保留字:signals, slots, emit */ int main(int argc,char** argv) { ??? QCoreApplication app(argc,argv); ? ??? MySignal sig; ??? MySlot slot; ? ??? //通過QObject的connect實現信號和槽函數之間的關聯, ??? //當調用了信號之后槽函數也相應的被調用了 ??? QObject::connect(&sig, SIGNAL(sig()), &slot, SLOT(slot())); ??? //通過下面一行實現發射一個信號 ??? emit sig.sig(); ??? return app.exec(); } |
| 運行結果:
|
?
總結
- 上一篇: 5.Qt自定义Button按钮的实现
- 下一篇: s3c2440移植MQTT