qt同一个信号和槽传递不同类型的vctor,例子
时间: 2023-07-13 11:04:49 浏览: 79
假设我们有一个信号 `mySignal` 和一个槽 `mySlot`,并且我们希望能够在不同类型的 `vector` 之间传递数据。在这种情况下,我们可以使用模板来定义信号和槽,以便它们能够接受任何类型的 `vector`。
示例代码如下:
```cpp
#include <QObject>
#include <QVector>
class MyObject : public QObject
{
Q_OBJECT
public:
explicit MyObject(QObject *parent = nullptr) : QObject(parent)
{
}
signals:
template<typename T>
void mySignal(const QVector<T>& data)
{
emit mySignalImpl(data);
}
private:
void mySignalImpl(const QVector<int>& data)
{
qDebug() << "Received int vector:" << data;
}
void mySignalImpl(const QVector<QString>& data)
{
qDebug() << "Received string vector:" << data;
}
public slots:
template<typename T>
void mySlot(const QVector<T>& data)
{
qDebug() << "Received vector of size" << data.size();
}
};
```
在上面的示例中,我们使用模板函数 `mySignal` 和 `mySlot` 来接受不同类型的 `vector`。这些模板函数将向实际的信号和槽函数 `mySignalImpl` 和 `mySlotImpl` 转发数据。这些实际的函数将根据传递的 `vector` 的类型来执行相应的操作。
现在我们可以使用以下代码来测试 `MyObject` 类:
```cpp
QVector<int> intVector = {1, 2, 3};
QVector<QString> stringVector = {"hello", "world"};
MyObject obj;
QObject::connect(&obj, &MyObject::mySignal<int>, &obj, &MyObject::mySlot<int>);
QObject::connect(&obj, &MyObject::mySignal<QString>, &obj, &MyObject::mySlot<QString>);
emit obj.mySignal(intVector);
emit obj.mySignal(stringVector);
```
在上面的代码中,我们首先创建了一个包含整数的 `vector` 和一个包含字符串的 `vector`。然后,我们创建了一个 `MyObject` 对象,并将其信号和槽连接起来。最后,我们分别向 `mySignal` 发送 `intVector` 和 `stringVector`,并观察 `mySlot` 中的输出。
阅读全文