Qt不同类之间槽函数连接

Qt的槽函数消息传递机制不仅适合在同一个类中使用 ,同时也可以在不同类之间进行消息传递。信号槽在不同类之间进行消息传递步骤如下:
假如B类向A类传递信号
1.首先在B类中必须继承QObject类或者它的子类们,并且包含头文件。如果B类已经继承了其他类,那就让B类多继承。例如:ImageWidget类继承QObject和QGraphicsItem两个类(QObject或者它的子类们一定要放在前面,第二个public不能省略,否则会出现类型转换访问不存在)

class ImageWidget :public QObject,public QGraphicsItem
{
    Q_OBJECT//这个是信号指令,需要消息传递则需要加上
}

2.在B类头文件中声明信号
括号里面的参数是信号携带的信息,可以不携带信息,只做函数跳转的作用。

signals:
    void sendMessage(发送携带的信息);

3.在B类.cpp文件中需要发送信号的地方将信号发送出去

//此处为需要发送信号的位置(函数内部)
emit sendMessage(发送携带的信息);

4.在A类头文件中声明接收函数并且在.cpp中写函数处理内容
如果没有信息被携带,则不需要参数

private slots:
	void getMessage(接收的信息);

5.在A类.cpp中连接信号与槽

connect(B类对象,SIGNAL(sendMessage(接收参数的类型)),this,SLOT(getMessage(接收参数的类型)));

如有描述不当,感谢指正,诚恳求教!

Qt 中,可以使用信号机制来实现对象之间的通信。如果想要在不同的文件中连接串口对象的函数,可以通过以下步骤实现: 1. 在发送信号的文件中,包含接收信号的文件的头文件。 2. 在发送信号的文件中,定义一个信号,用于触发串口对象的函数。 3. 在接收信号的文件中,定义一个函数,用于接收信号并处理串口数据。 4. 在接收信号的文件中,在构造函数中使用 connect() 函数信号函数连接起来。 下面是一个示例代码: 在发送信号的文件中: ```cpp // senddata.h #include "receivedata.h" // 包含接收信号的文件的头文件 class SendData : public QObject { Q_OBJECT public: SendData(); signals: void dataReceived(const QByteArray& data); // 定义一个信号 }; SendData::SendData() { QByteArray data; // 假设这里有一些串口数据需要发送 emit dataReceived(data); // 触发信号 } ``` 在接收信号的文件中: ```cpp // receivedata.h class ReceiveData : public QObject { Q_OBJECT public: ReceiveData(); private slots: void onDataReceived(const QByteArray& data); // 定义一个函数 }; ReceiveData::ReceiveData() { // 创建串口对象 QSerialPort* serial = new QSerialPort(this); // 连接串口对象的 readyRead() 信号函数 onDataReceived() 上 connect(serial, &QSerialPort::readyRead, this, &ReceiveData::onDataReceived); } void ReceiveData::onDataReceived(const QByteArray& data) { // 处理串口数据 } ``` 在主程序中,只需要实例化 SendData 和 ReceiveData 对象即可: ```cpp // main.cpp #include "senddata.h" #include "receivedata.h" int main() { SendData* sender = new SendData(); ReceiveData* receiver = new ReceiveData(); // ... return 0; } ``` 注意,在使用信号机制时,发送和接收信号的对象必须都是从 QObject 继承的。同时,信号函数的参数型必须一致。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值