(39)++关于信号与槽 conenct 的源码定义简写版:
class Q_CORE_EXPORT QObject // 这就是大名鼎鼎的 QObject 类,定义于<qobject.h>
{
Q_OBJECT
// 本基础类 QObject 也用该宏定义了一个 objectName 属性
Q_PROPERTY(QString objectName
READ objectName WRITE setObjectName
NOTIFY objectNameChanged
BINDABLE bindableObjectName ) //这是函数名
//QBindable<QString> QObject :: bindableObjectName();
static QMetaObject::Connection connect( //类的静态成员函数
const QObject * sender , const char * signal,
const QObject * receiver, const char * member,
Qt::ConnectionType = Qt::AutoConnection );
inline QMetaObject::Connection connect( //此时要求槽函数用 SLOT()宏形式
const QObject * sender, const char * signal, const char * member,
Qt::ConnectionType type = Qt::AutoConnection) const; //常量修饰
//帮助文档显示 QMetaMethod Class,这是个很大的类
//该类应该实现了有参构造函数,根据函数指针构造一个 QMetaMethod 对象。没源码。
static QMetaObject::Connection connect( //形参是类方法的左值引用
const QObject * sender , const QMetaMethod & signal,
const QObject * receiver, const QMetaMethod & method,
Qt::ConnectionType type = Qt::AutoConnection);
}
(40)解除信号与槽函数的绑定 disconnect():
++ 源码支持(阅读源码很累,也很恐惧,很担心太难,也担心时间。但这才是最快的方法了,理解中记忆):
class Q_CORE_EXPORT QObject // 这就是大名鼎鼎的 QObject 类,定义于<qobject.h>
{
Q_OBJECT
static bool disconnect( //静态成员函数,宏形式
const QObject * sender , const char * signal,
const QObject * receiver, const char * member);
static bool disconnect( //静态成员函数,函数指针形式
const QObject * sender , const QMetaMethod & signal,
const QObject * receiver, const QMetaMethod & member);
static bool disconnect(const QMetaObject::Connection &); //逆天
inline bool disconnect( //成员函数版本,可见本 this 相当于 sender
const char * signal = nullptr, //成员函数版本也构成重载
const QObject * receiver = nullptr,
const char * member = nullptr) const // 适用于 const子对象
{ return disconnect(this, signal, receiver, member); }
inline bool disconnect( //成员函数版本,本 this 相当于 sender
const QObject * receiver, // 适用于 const子对象
const char * member = nullptr) const
{ return disconnect(this, nullptr, receiver, member); }
}
(41)QObject 类里的又一个基础函数:
(42)信号的发射举例,emit ;
(43)
谢谢