Qt5 與 Qt4 的點點差別------信號與槽

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                 槽函數是普通的成員函數,做爲成員函數,會受到 publicprivateprotected 的影響;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/ 

相關文章
相關標籤/搜索