當(dāng)前位置:
首頁 >
6.QT信号和槽
發(fā)布時(shí)間:2024/9/27
34
豆豆
新建項(xiàng)目SignalAndSlot項(xiàng)目
編寫代碼如下:
| 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:保留字下,并且不需要實(shí)現(xiàn) *2)槽的定義必須在slots:保留字下,需要實(shí)現(xiàn) *3)信號和槽通過QObject::connect函數(shù)連接 *4)當(dāng)信號被觸發(fā)是,槽函數(shù)被調(diào)用 * *需要注意的是: *1) 信號的定義必須在signals:保留字下,并且不需要實(shí)現(xiàn) *2)槽的定義必須在slots:保留字下,需要實(shí)現(xiàn) *3)信號和槽通過QObject::connect函數(shù)連接 *4)當(dāng)信號被觸發(fā)時(shí),槽函數(shù)被調(diào)用 * *需要注意的是: *1)信號和槽,是QT的拓展,所以實(shí)現(xiàn)信號和槽的類,必須是QObject的子類 *2)實(shí)現(xiàn)信號和槽的類,必須以宏Q_OBJECT開始 *3)連接信號和槽,要用到SIGNAL和SLOT宏,轉(zhuǎn)換函數(shù)為字符串 *4)一個(gè)信號可以和多個(gè)槽連接,槽函數(shù)調(diào)用的順序是不確定的 *5)多個(gè)信號可以同時(shí)連接一個(gè)槽 *6)信號可以連接信號,形成信號傳導(dǎo) *7)信號和槽的參數(shù)應(yīng)該一樣多,而且類型必須相同 *8)信號和槽都可以重載 *9)信號和槽都可以有默認(rèn)參數(shù) *10)槽函數(shù)可以像普通函數(shù)一樣被調(diào)用 *11)在槽函數(shù)中,調(diào)用sender可以獲得信號調(diào)用者 * * 總結(jié)下: * 一個(gè)類:QObject * 三個(gè)宏:Q_OBJECT SIGNAL SLOT * 三個(gè)保留字:signals, slots, emit */ int main(int argc,char** argv) { ??? QCoreApplication app(argc,argv); ? ??? MySignal sig; ??? MySlot slot; ? ??? //通過QObject的connect實(shí)現(xiàn)信號和槽函數(shù)之間的關(guān)聯(lián), ??? //當(dāng)調(diào)用了信號之后槽函數(shù)也相應(yīng)的被調(diào)用了 ??? QObject::connect(&sig, SIGNAL(sig()), &slot, SLOT(slot())); ??? //通過下面一行實(shí)現(xiàn)發(fā)射一個(gè)信號 ??? emit sig.sig(); ??? return app.exec(); } |
| 運(yùn)行結(jié)果:
|
?
總結(jié)
- 上一篇: 5.Qt自定义Button按钮的实现
- 下一篇: 1.关于QT中的Graphics绘图,定