在 Qt 5 中,QObject::connect()
有五個重載:web
QMetaObject::Connection connect(const QObject *, const char *, const QObject *, const char *, Qt::ConnectionType); QMetaObject::Connection connect(const QObject *, const QMetaMethod &, const QObject *, const QMetaMethod &, Qt::ConnectionType); QMetaObject::Connection connect(const QObject *, const char *, const char *, Qt::ConnectionType) const; QMetaObject::Connection connect(const QObject *, PointerToMemberFunction, const QObject *, PointerToMemberFunction, Qt::ConnectionType) QMetaObject::Connection connect(const QObject *, PointerToMemberFunction, Functor);
Qt 4 的信號槽同 Qt 5 相似。在 Qt 4 的 QObject 中,有三個不一樣的connect()
重載:函數
bool connect(const QObject *, const char *, const QObject *, const char *, Qt::ConnectionType); bool connect(const QObject *, const QMetaMethod &, const QObject *, const QMetaMethod &, Qt::ConnectionType); bool connect(const QObject *, const char *, const char *, Qt::ConnectionType) const
除了返回值,Qt 4 的connect()
函數與 Qt 5 最大的區別在於,Qt 4 的 signal 和 slot 只有const char *
這麼一種形式。spa
自定義信號槽須要注意的事項:.net
o 發送者和接收者都須要是QObject的子類(固然,槽函數是全局函數、Lambda 表達式等無需接收者的時候除外);code
o 使用 signals 標記信號函數,信號是一個函數聲明,返回 void,不須要實現函數代碼;get
o 槽函數是普通的成員函數,做爲成員函數,會受到 public、private、protected 的影響;qt
o 使用 emit 在恰當的位置發送信號;it
o 使用QObject::connect()函數鏈接信號和槽。io
Qt 4 與 Qt 5 的自定義信號槽區別class
在 Qt 4 中,槽函數必須放在由 slots 修飾的代碼塊中,而且要使用訪問控制符進行訪問控制。
參考資料:
http://www.devbean.net/2012/08/qt-study-road-2-custom-signal-slot/