适配器模式 具体实例 Qt c++
时间: 2023-06-29 12:15:55 浏览: 145
在Qt C++中,适配器模式可以用于将不同类的信号和槽(即接口)进行连接,从而实现不同类之间的协作。
例如,我们有两个类A和B,它们都有一个信号signal1和一个槽slot1,但是它们的实现方式不同,不能直接连接。此时,我们可以创建一个适配器类C,该类继承自QObject并包含一个槽slot1,然后在C的构造函数中将信号signal1与槽slot1进行连接。这样,我们就可以通过C来连接A和B的信号和槽。
以下是一个简单的示例代码:
```c++
// 类A
class A : public QObject
{
Q_OBJECT
public:
A(QObject *parent = nullptr) : QObject(parent) {}
signals:
void signal1(int value);
public slots:
void slot1(int value) { qDebug() << "A::slot1" << value; }
};
// 类B
class B : public QObject
{
Q_OBJECT
public:
B(QObject *parent = nullptr) : QObject(parent) {}
signals:
void signal1(int value);
public slots:
void slot1(int value) { qDebug() << "B::slot1" << value; }
};
// 适配器类C
class C : public QObject
{
Q_OBJECT
public:
C(A *a, B *b, QObject *parent = nullptr) : QObject(parent)
{
// 连接信号和槽
connect(a, &A::signal1, this, &C::slot1);
connect(b, &B::signal1, this, &C::slot1);
}
public slots:
void slot1(int value) { qDebug() << "C::slot1" << value; }
};
// 使用示例
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
A aObj;
B bObj;
C cObj(&aObj, &bObj);
// 发射信号
emit aObj.signal1(1);
emit bObj.signal1(2);
return a.exec();
}
```
在上面的代码中,类A和类B都有一个信号signal1和一个槽slot1,但是它们的实现方式不同。类C是一个适配器类,它的构造函数中将信号signal1和槽slot1进行了连接。在main函数中,我们创建了类A、类B和类C的实例,并通过类A和类B的信号来测试适配器类C的效果。最终输出的结果为:
```
C::slot1 1
C::slot1 2
```
可以看出,适配器类C成功地将类A和类B的信号和槽进行了连接,实现了类A和类B之间的协同工作。
阅读全文