适配器模式(Adapter Pattern)是一种结构型设计模式,允许将一个类的接口转换成客户端所期望的另一个接口,可以让原本由于接口不兼容而不能一起工作的类能够一起工作。
适配器模式需要实现的部分为:
我们都知道信号与槽机制可以连接两个参数并不完全相同,也就是接口不兼容的两个类中的函数。以下是connect函数的实现:
- static QMetaObject::Connection connect(const QObject *sender, const char *signal,
- const QObject *receiver, const char *member, Qt::ConnectionType = Qt::AutoConnection);
可以看到这里返回了一个静态的 QMetaObject::Connection 对象,查看定义:
- class Q_CORE_EXPORT QMetaObject::Connection {
- void *d_ptr; //QObjectPrivate::Connection*
- ......
- }
-
-
- //QObjectPrivate::Connection
- struct Connection : public ConnectionOrSignalVector
- {
- // 连接到此对象中插槽的连接的链表,下一个在基类中
- Connection **prev;
- // 连接到此对象中信号的连接的链接列表
- QAtomicPointer<Connection> nextConnectionList;
- Connection *prevConnectionList;
- //信号发送者
- QObject *sender;
- //信号接收者
- QAtomicPointer<QObject> receiver;
- ......
- };
可以看出 QMetaObject::Connection 里面有一个d指针指向 QObjectPrivate::Connection,而QObjectPrivate::Connection 里定义了信号与槽的各种信息,也就是作为适配器。
总结一下,在信号与槽中:
适配器:QMetaObject::Connection ,里面定义了信号与槽的各种信息。
目标接口:一个槽函数或者是一个 QObject 类的成员函数,用于响应信号。