qt的信号和槽传递泛型vetor
时间: 2023-07-13 18:04:46 浏览: 204
在Qt中,信号和槽可以传递参数,包括泛型vector。要传递泛型vector,需要在信号和槽的声明中使用模板参数。
下面是一个示例代码:
```cpp
#include <QObject>
#include <vector>
class MyClass : public QObject
{
Q_OBJECT
public:
MyClass(QObject *parent = nullptr) : QObject(parent) {}
signals:
void mySignal(const std::vector<int>& data);
public slots:
void mySlot(const std::vector<int>& data)
{
// 处理数据
}
};
// connect 信号和槽
MyClass *obj = new MyClass;
connect(obj, &MyClass::mySignal, obj, &MyClass::mySlot);
// 发射信号
std::vector<int> data = {1, 2, 3};
emit obj->mySignal(data);
```
在上面的代码中,`MyClass` 类声明了一个名为 `mySignal` 的信号和一个名为 `mySlot` 的槽,它们都接受一个类型为 `std::vector<int>` 的参数。在 `main` 函数中,我们创建了一个 `MyClass` 的实例 `obj`,并将 `mySignal` 信号连接到 `mySlot` 槽。最后,我们发射 `mySignal` 信号并传递一个包含三个整数的 `std::vector<int>`。
注意,为了在 Qt 中使用自定义类型作为信号和槽的参数,必须先在头文件中使用 `Q_DECLARE_METATYPE` 宏来声明类型。在本例中,由于 `std::vector<int>` 是标准库类型,因此不需要进行声明。
阅读全文