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

前两天用到了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();
    

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

 

 

 

猜你喜欢

转载自blog.csdn.net/kongqingxin12/article/details/84501138