QT学习之路---信号与槽问题解析

本文详细解析了QT5.11版本中信号与槽机制的正确使用方法,包括常见错误与解决策略,如语法修正、数据格式匹配及函数声明的重要性,适合初学者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前两天用到了QT的信号与槽这个机制,刚开始发射信号的时候,我是这么写的语句

connect(sender,SINGAL(),receiver,SLOT())

由于我用的是QT 5.11这个本,从网上查到的例子来说,大部分都是以上那个形式,也没有问题,而实际上在QT5.11版本上,向下面这样写编译器不会报错

    connect(Polar_chartView,SIGNAL(Polar_Close_Singal),this,SLOT(Recrive_Signal_From_ChidrenDialog));

 但是在debug时应用程序输出这样的提示

QObject::connect: Parentheses expected, signal Polar::Polar_Close_Singal in ..\JCY\mainwindow.cpp:9

QObject::connect: (receiver name: 'MainWindow')

应该更直白的说,语法错了。。。。

因为在QT5.11中,语法格式应为

    connect(Polar_chartView,&Polar::Polar_Close_Singal,this,&MainWindow::Recrive_Signal_From_ChidrenDialog);

这里得吐槽一下,QT这个自动提示功能,慢的很,倒逼我去背语法啊!!!

这里连接函数用正确的语法写好之后,只能说这个桥搭好了,能不能让数据按照我们的意愿过桥,也是一个对于初学者不是很友好的问题,

  1. 发射信号里含有数据格式数量(send_format_num)一定是大于等于接收信号里含有的数据格式的数量(receive_format_num),就是我可以多发,你可以选择性的接收,但是所有想要接收的一定要都发出来,不然会报错;

  2. 一定要在头文件里声明相应的函数,这个网上有很多就不多说了;

  3. 发射信号的语法都是一样的,都是用emit这个关键字

  4. emit Polar_Close_Singal(QString);

     

    接收信号其实是一个void类型的函数

    void MainWindow::Recrive_Signal_From_ChidrenDialog(QString temp)
    {
    qDebug()<<temp;
    
    }
    

     

  5. 我在使用信号与槽机制时遇到的一点小问题,就是connect函数里,sender这个发送者名称这里遇到的,首先我是从Polar这个C++类向MainWindow这个QT窗口类类里发送数据,我就需要在MainWindow里声明一个Polar类的变量名,这个变量名一定要唯一,否则connect函数也不会报错,但就是不会把数据发送过来。

    PortDialog *portdialog=new PortDialog();
    

    后续遇到问题会逐渐更新。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值