qt同一个信号和槽传递不同类型的vctor,且写成例子
时间: 2023-07-13 12:04:49 浏览: 80
可以使用 Qt 的信号和槽机制实现传递不同类型的 vector。下面是一个简单的例子:
假设有两个类 `Sender` 和 `Receiver`,它们之间通过信号和槽进行通信。`Sender` 类中有一个 `sendIntVector` 和一个 `sendStringVector` 槽,分别用于发送整数向量和字符串向量。`Receiver` 类中有两个槽 `receiveIntVector` 和 `receiveStringVector` 分别用于接收整数向量和字符串向量。代码如下:
```cpp
class Sender : public QObject
{
Q_OBJECT
public:
explicit Sender(QObject *parent = nullptr) : QObject(parent) {}
public slots:
void sendIntVector(const QVector<int> &vec)
{
emit intVectorSent(vec);
}
void sendStringVector(const QVector<QString> &vec)
{
emit stringVectorSent(vec);
}
signals:
void intVectorSent(const QVector<int> &vec);
void stringVectorSent(const QVector<QString> &vec);
};
class Receiver : public QObject
{
Q_OBJECT
public:
explicit Receiver(QObject *parent = nullptr) : QObject(parent) {}
public slots:
void receiveIntVector(const QVector<int> &vec)
{
qDebug() << "Received int vector: " << vec;
}
void receiveStringVector(const QVector<QString> &vec)
{
qDebug() << "Received string vector: " << vec;
}
};
```
在主函数中,我们可以创建 `Sender` 和 `Receiver` 的实例,并将它们的信号和槽连接起来:
```cpp
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Sender sender;
Receiver receiver;
QObject::connect(&sender, &Sender::intVectorSent, &receiver, &Receiver::receiveIntVector);
QObject::connect(&sender, &Sender::stringVectorSent, &receiver, &Receiver::receiveStringVector);
QVector<int> intVec = {1, 2, 3};
QVector<QString> strVec = {"hello", "world"};
sender.sendIntVector(intVec);
sender.sendStringVector(strVec);
return a.exec();
}
```
这样,当 `Sender` 类中的 `sendIntVector` 槽被调用时,会发出 `intVectorSent` 信号,该信号会被连接到 `Receiver` 类中的 `receiveIntVector` 槽,从而将整数向量传递给 `Receiver` 类。同理,当 `Sender` 类中的 `sendStringVector` 槽被调用时,会发出 `stringVectorSent` 信号,该信号会被连接到 `Receiver` 类中的 `receiveStringVector` 槽,从而将字符串向量传递给 `Receiver` 类。
阅读全文